CGI Directory Listing
CGI
Download (.zip)
#!perl
@SI=('','k','M','G','T','P','E');
$dirfile='Header.html'; $routercgi='cgi-bin/dir.pl';
$noshow='"."..".htaccess".htpasswd"HEADER.html"README.html"FOOTER.html"HEADER.shtml"README.shtml"FOOTER.shtml"cgi-bin".exe".cgi".pl"';
print "Content-Type: text/html\n\n";
if (length($ENV{'PATH_INFO'})>0) { $path=substr($ENV{'PATH_INFO'},0,(length($ENV{'PATH_INFO'})-length($dirfile))); } else { $path="/files/"; }
if ($path!~/:/) { $path=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # URL Enc opendir(aDIR,"$ENV{'DOCUMENT_ROOT'}$path");@flList=sort readdir(aDIR);closedir(aDIR);
$mx=0;foreach (@flList){if (length>$mx){$mx=length;}}$mx;
print "<body bgcolor=white><TABLE align=center bgColor=white border=0 cellPadding=2 cellSpacing=1 width=100%><pre>"; if ($path ne '/') { print "<li><a href=\"$path../\"> <b>Parent Directory</b></a></li>\n"; } foreach $fl (@flList) { if ($noshow !~ /"$fl"/i) { @flStat=stat("$ENV{'DOCUMENT_ROOT'}$path$fl"); if ($flStat[2] eq "16895" && $flStat[7] eq "0") # MODE & SIZE = folder { $fladdr=$fl; $fladdr=~s/([^a-zA-Z0-9_\-.\~])/uc sprintf("%%%02x",ord($1))/eg; print "<TR><TD bgColor=#f0f0f0><FONT face=Verdana size=2><IMG SRC=http://192.168.196.128/images/folder.gif align=left><a href=\"$path$fladdr/\"><b>$fl/</b></a>\n" } else { push (@flList2,"$fl\t$flStat[7]"); } } } print "<TABLE align=center bgColor=white border=0 cellPadding=2 cellSpacing=1 width=100%>"; foreach $fl (@flList2) { ($fl,$sz)=split(/\t/,$fl); $fladdr=$fl; $fladdr=~s/([^a-zA-Z0-9_\-.\~])/uc sprintf("%%%02x",ord($1))/eg; print "<TR><TD bgColor=#f0f0f0><FONT face=Verdana size=2><IMG SRC=http://192.168.196.128/images/file.gif align=left><a href=\"$path$fladdr\">$fl</a><TD width=10% bgcolor=#f0f0f0><FONT face=Verdana size=2>"; print ' ' x int($mx - length($fl)); print &txtbyte($sz);print "</TD></TR>\n"; } print "</ul></pre></TR></TD></TABLE><P><center><FONT face=Verdana size=1>Copyright <B>192.168.196.128</B> Directory Listing Script</center>"; } exit;
sub txtbyte{ local($_)=@_;local $mm=0; while ($_/1024>1){$_=$_/1024;$mm++;} if ($mm>0){ ($n,$_)=split(/\./);if (length>2){while(length>2){chop;}}else{while (length($_)<2){$_="$_ ";}}$n=sprintf("%4d",$n);return "$n.$_ $SI[$mm]\B" } else{$_=sprintf("%4d",$_);return "$_ <i><FONT size=1>Bytes</i>";} }
|