Page 1 of 1

script translation

Posted: Tue Aug 26, 2003 11:30 am
by WebD
Can anyone translate this perl script to php for me?

Code: Select all

########################################################
# URL of this script
$script    = "http://theboxnet.servehttp.com/browse/tabs.cgi";

########################################################
# Base absolute path and base URL, $basedir SHOULD point to $baseurl
$basedir   = "c:\server\www";
$baseurl   = "theboxnet.servehttp.com";

########################################################
# Header and Footer files
$header    = "c:\server\www\browse\header.txt";
$footer    = "c:\server\www\browse\footer.txt";

########################################################
# URL to images directory, relative or absolute
$imagedir  = "images";

########################################################
# File types with their own images, the images should be named їtype].gif
@filetypes = ("avi", "bmp", "gif", "html", "jpg", "mov", "mpeg", "swf", "txt", "zip");

########################################################
# To enable internal text viewer, set to 1, or 0 otherwise
$textviewer= 1; 

########################################################
# File types which uses the internal text viewer
@texttypes = ("txt", "msg", "ini");

# END OF CONFIG
########################################################
########################################################
# By the way, to Perl programmers:
# I'm not quite familiar with directory handling
# I used a quite silly method to determine which is a dir 
# and which is a file (but it works, of course)
# If you have a better method, please email me

($action, $vir_path) = split(/&/, $ENV{'QUERY_STRING'});
$vir_path =~ s/%(їa-fA-F0-9]їa-fA-F0-9])/pack("C", hex($1))/eg;

if ($ENV{'QUERY_STRING'} ne "") {
	if ($vir_path =~ /^\.\./ || $vir_path =~ /\/\.\.\// || $vir_path =~ /\.\.$/) {
		print "Content-type: text/html\n\n";
		print &header;
		print "<font size=3 face=arial><b>You are not allowed to access a higher level directory with ..</b></font>\n";
		print &footer;
		exit;
		&#125;
	else &#123;
		$path = "$basedir/$vir_path";
		&#125;
	&#125;
else &#123;
	$path   = $basedir; 
	$action = "browse";
	&#125;

$thisdir = ($vir_path eq "") ? "" : "$vir_path/";
($action eq "browse") ? &browse : &get;

###############
sub browse &#123;

print "Content-type: text/html\n\n";

opendir(BASE, $path);
@names = readdir(BASE);
closedir(BASE);

foreach $name (@names) &#123;	
	$isdir = opendir(DIR, "$basedir/$thisdir$name");
	if ($isdir == 1) &#123;
		push(@dirs, $name) unless ($name eq '.' || $name eq '..');
		&#125;
	else &#123;
		push(@files, $name);
		&#125;
	closedir(DIR);
	
	(undef, undef, undef, undef, undef, undef, undef,
	$size, undef, $modified, undef, undef, undef) = stat("$basedir/$thisdir$name");
	($min, $hr, $day, $mon, $yr) = (localtime($modified))&#1111;1,2,3,4,5];
	$min = "0$min" unless $min >= 10;
	$hr  = "0$hr"  unless $hr  >= 10;
	$day = "0$day" unless $day >= 10;
	$mon = "0$mon" unless $mon >= 10;
	$filesize&#123;$name&#125; = $size;
	$last_mod&#123;$name&#125; = "$mon/$day/$yr $hr:$min";
	&#125;

print &header;

$thisdir =~ s/ /\%20/g;

print "<table border=0 cellspacing=1 width=80%>\n";
print "<tr>\n";
print "<td align=center width=50%><font size=2 face=arial><b>Name</b></font>\n";
print "<td align=center width=30%><font size=2 face=arial><b>Last Modified</b></font>\n";
print "<td align=center width=20%><font size=2 face=arial><b>Size (Bytes)</b></font>\n";
print "</tr>\n";

print "<tr>\n<td colspan=3>\n";
print "<font size=2 face=arial><b>\n";
if ($vir_path ne "") &#123;
	$temp = $vir_path =~ tr#/#/#;
	if ($temp > 0) &#123;
		$pardir = "?browse&".substr($vir_path, 0, rindex($vir_path, "/"));
		&#125;
	else &#123;
		$pardir = "";
		&#125;
	print "<img src="$imagedir/up.gif" align="absbottom"><a href="$script$pardir">Parent Directory</a>\n";
	&#125;
print "</b></font>\n";
print "</td>\n</tr>\n";

foreach $dir (sort @dirs) &#123;
	$dir_url = $dir;
	$dir_url =~ s/ /\%20/g;
	print "<tr>\n<td>\n";
	print "<font size=2 face=arial><b>\n";
	print "<img src="$imagedir/dir.gif" align="absbottom"><a href="$script?browse&$thisdir$dir_url">$dir</a></b></font>\n";
	print "</td>\n";
	print "<td align=right><font size=2 face=arial><b>$last_mod&#123;$dir&#125;</b></font></td>\n";
	print "<td align=right><font size=2 face=arial><b>$filesize&#123;$dir&#125;</b></font></td>\n";
	print "</tr>\n";
	&#125;

foreach $file (sort @files) &#123;
	$ext = substr($file, rindex($file, "\.")+1);
	$type = "file";
	foreach $filetype (@filetypes) &#123;
		if (lc($ext) eq $filetype) &#123;$type = $filetype;&#125;
		&#125;
	$file_url = $file;
	$file_url =~ s/ /\%20/g;
	print "<tr>\n<td>\n";
	print "<font size=2 face=arial><b>\n";
	print "<img src="$imagedir/$type.gif" align="absbottom"><a href="$script?get&$thisdir$file_url">$file</a></b></font>\n";
	print "</td>\n";
	print "<td align=right><font size=2 face=arial><b>$last_mod&#123;$file&#125;</b></font></td>\n";
	print "<td align=right><font size=2 face=arial><b>$filesize&#123;$file&#125;</b></font></td>\n";
	print "</tr>\n";
	&#125;
print "</table>\n";

print &footer;

&#125;

sub get &#123;

if ($textviewer) &#123;
	$ext = substr($vir_path, rindex($vir_path, "\.")+1);
	foreach $type (@texttypes) &#123;
		if ($type eq $ext) &#123;
			$flag = 1;
			&#125;
		&#125;
	if ($flag) &#123;
		print "Content-type: text/html\n\n";
		print &header;
		open(FILE, "$basedir/$vir_path");
		print "<font face=Courier size=2>\n";
		$line = join("<br>", <FILE>);
		$line =~ s/ /&nbsp;/g;
		print $line;
		print "</font>\n";
		close(FILE);
		print &footer;
		exit;
		&#125;
	&#125;
	
print "Location: $baseurl/$vir_path\n\n";
&#125;

##############################
# Return the Header contents
sub header &#123;
open(HEAD, $header) or die("Cannot open $header");
@lines = <HEAD>;
close(HEAD);
return @lines;
&#125;

##############################
# Return the Footer contents
sub footer &#123;
open(FOOT, $footer) or die("Cannot open $footer");
@lines = <FOOT>;
close(FOOT);
return @lines;
&#125;

Posted: Mon Sep 01, 2003 8:23 am
by BDKR
How much?

Posted: Tue Sep 02, 2003 5:46 pm
by genetix
wow I never nu php and perl where so similar.

Posted: Wed Sep 03, 2003 5:03 am
by m3mn0n
You know one, you know 'em all... ;)

Besides the specifics of course.