Hi
I've been given what I am told is a PHP script to be used on my server. I
do not know any PHP.
I am trying to use a feature of a program called ArchiCAD. This feauture
allows CAD drawing files to be published on a webpage, and viewed and
commented on using a java applet.
The problem is that with ArchiCAD v10, it now makes spaces and uses other
URL unfriendly characters in the filenames, making this feature not
properly.
This is an example of the faulty output:
http://test404.damnserver.com
Following is what I have been told is a PHP script. It is meant for a
freebsd or MacOS server. It apparently unpacks a zip file, deletes some
temp files that MacOS makes, and renames the files to make them URL
friendly. It then edits the Content.xml file with the filename changes.
First of all, is this actually a PHP script? I need it to run on a Windows
server running IIS. But someone that I gave it to look at has said that he
thinks that it does some strange functions, and he thinks it's actually a
BASH file, and I have no hope of getting it to run on Windows.
I need something that does the same thing for a Windows server running the
website linked earlier. I also do not want the unzip function, and it needs
to be taken out.
I would be grateful for any thoughts or opinion on this.
Cheers.
_______________ _______________ _______________ _______________ _________
function process_gpr($zi p_file, $record_folder_ location) #opens the zip,
makes it web safe
{
if(!ini_get('up load_tmp_dir')) #check php's upload_tmp_dir
{ #if it's not in the ini set it to this value
$upload_tmp_dir = '/var/tmp/';
}
else
{ #otherwise use the ini value
$upload_tmp_dir = ini_get('upload _tmp_dir');
}
$upload_tmp_dir = $upload_tmp_dir . "php/"; #make our own little folder for
unzipping
if(!file_exists ($upload_tmp_di r)) { shell_exec("mkd ir " .
$upload_tmp_dir ); }
if(!shell_exec( "rm -Rf " . $upload_tmp_dir . "*")) #clean it out; if that
went smoothly
{ #unzip the zip file
shell_exec("unz ip -d " . $upload_tmp_dir . " " . $zip_file);
#zip's from osx's finder create this metadata folder
$macosx_only1 = $upload_tmp_dir . "__MACOSX"; #delete it if present
if(file_exists( $macosx_only1)) { if(is_dir($maco sx_only1)) {
shell_exec("rm -Rf " .
$macosx_only1); } }
$macosx_only2 = $upload_tmp_dir . ".DS_Store" ; #and this file too
if(file_exists( $macosx_only2)) { if(is_file($mac osx_only2)) {
shell_exec("rm -Rf " .
$macosx_only2); } }
#find the Reviewer folder in the expanded tree
if(preg_match('/(\/.*\/)Reviewer/i', shell_exec("fin d " . $upload_tmp_dir .
" -type d -name
Reviewer"), $matches))
{ #find the enclosing folder
$gpr['path'] = $enclosing_fold er = $matches[1];
if($dh = opendir($enclos ing_folder)) #open the enclosing folder
{
while(($file = readdir($dh)) !== false) #read it out
{
if((filetype($e nclosing_folder . $file) == "dir") && ($file !== "Reviewer")
&& ($file !==
".") && ($file !== ".."))
{ #find the data folder
$gprf = $file . "/";
}
if((filetype($e nclosing_folder . $file) == "file") && (substr($file, -5) ==
".html") &&
($file !== ".") && ($file !== ".."))
{ #find the html file and rename it
preg_match("/(.+)\..*?$/i", $file, $name);
$gpr['title'] = $name[1]; #save that title for later
rename($enclosi ng_folder . $file, $enclosing_fold er . 'gpr.html');
}
}
closedir($dh); #close the enclosing folder
#create the folder name
$gpr['file_name'] = $gpr['title'] . "-" . date("Y-m-d") . ".gpr";
#find the real filepath leading up to where we're placing it
preg_match("/(\/.*\/)rianachd\/.+\..+/i", $_SERVER['PATH_TRANSLATE D'],
$project_folder _full_path);
$project_folder _full_path = $project_folder _full_path[1] .
substr($record_ folder_location , 3)
.. "/" . $gpr['file_name'] . "/" . $gpr['title'] . "/";
#echo "<h6>project_fo lder_full_path: $project_folder _full_path</h6>";
$gprf = $enclosing_fold er . $gprf; #set this to data folder
$catalog = $gprf . "Catalog.xm l"; #path to catalog file
if($handle = fopen($catalog, "r"))
{ #read out contents of the catalog file
$contents = fread($handle, filesize($catal og));
#replace stupid characters in set, path, title and layout links & titles
#$contents = gpr_replacer($c ontent, $regex, $character, $replacement);
$contents = gpr_replacer($c ontents, "/\<Set\>(.*?)\< \/Set\>/i", "", "_");
$contents = gpr_replacer($c ontents, "/\<Set\>(.*?)\< \/Set\>/i", "", "_");
$contents = preg_replace('/path="(.*?)"/i', 'path="' .
$project_folder _full_path . '"',
$contents);
# $contents = gpr_replacer($c ontents, "/title=\"(.*?)\"/i", "", "_");
$contents = gpr_replacer($c ontents, "/href=\"(.*?)\"/i", "", "_");
$contents = gpr_replacer($c ontents, "/\<Set\>(.*?)\< \/Set\>/i", "&",
"AND");
# $contents = gpr_replacer($c ontents, "/title=\"(.*?)\"/i", "&", "AND");
$contents = gpr_replacer($c ontents, "/href=\"(.*?)\"/i", "&", "AND");
if($handle = fopen($catalog, "w+"))
{ #write out contents and close file
fwrite($handle, $contents);
fclose($handle) ;
if($handle = opendir($gprf))
{ #open the data folder
#shell_exec("mk dir " . $gprf . "/redline");
while (($file = readdir($handle )) !== false)
{
if (($file !== ".") && ($file !== "..") && (substr($file, 0, 1) !== '.') &&
(substr($file,
-4) == '.DWF'))
{ #change the characters of .DWF's here too
$newfile = gpr_replacer($f ile, "/(.*)/i", "", "_");
#newfile is necessary, because the name has been changed after the first
rename
rename($gprf . $file, $gprf . $newfile);
rename($gprf . $newfile, $gprf . gpr_replacer($n ewfile, "/(.*)/i", "&",
"AND"));
#once everything has been done, add a value to the success var
$success++;
}
} #close the data folder
closedir($handl e);
}
}
}
}
}
}
#return array of file_name, title, and path
if($success) { return $gpr; } else { return false; }
}
function gpr_replacer($c ontents, $regex, $character, $replacement) #
{ #if no replacement string is passed, use these
if(!$character) { $character = array("'", '"', ",", "=", "/", " "); }
#match the regular expression
preg_match_all ($regex, $contents, $contents_match es, PREG_SET_ORDER) ;
$contents_match es_cnt = count($contents _matches);
if($contents_ma tches_cnt) #if matches 0
{
for($i=0; $i<$contents_ma tches_cnt; $i++) #do for each match
{ #replace the found string
$insert = str_replace($ch aracter, $replacement, $contents_match es[$i][1]);
$contents = str_replace($co ntents_matches[$i][1], $insert, $contents);
}
}
#return results
return $contents;
}