Hallo, ich hab ein Script erstellt um das FancyIndexing vom Apache mittels PHP zu realisieren.
Auf diese Weise kann man die Verzeichnisausgabe sehr gut in die eigene Webseite integrieren
Ich wollte mal eure Meinung hören ob man da noch etwas optimieren kann, z.B. Code straffen oder vereinfachen etc.
PHP-Code:
<?php
#################### Einstellungen ############################################
$dir = ".";
$endung = "yes"; // Dateierweiterung anzeigen? yes|no
$iconordner = "/icons";
$foldericon = "$iconordner/folder.gif";
$backicon = "$iconordner/back.gif";
$iconheight = "22";
$iconwidth = "20";
#
################################################################################
function DateiIcons($datei,$ext){
global $iconordner;
if ($datei == "README") {
$icon = "$iconordner/alert.black.png";
}
else {
switch ($ext){
case "asf":
$icon = "$iconordner/movie.gif";
break;
case "deb":
$icon = "$iconordner/deb.gif";
break;
case "flv":
$icon = "$iconordner/movie.gif";
break;
case "mp4":
$icon = "$iconordner/movie.gif";
break;
case "wmv":
$icon = "$iconordner/movie.gif";
break;
default:
$icon = "$iconordner/unknown.gif";
break;
}}
return $icon;
}
function DateiTyp($datei,$ext){
if ($datei == "README") {
$dateityp = "README";
}
else {
switch ($ext){
case "asf":
$dateityp = "Advanced Systems Format";
break;
case "flv":
$dateityp = "Adobe Flash Video";
break;
case "mp4":
$dateityp = "PSP, iPod, Zune";
break;
default: // wenn unbekannt, return FILEINFO_MIME
$finfo = finfo_open(FILEINFO_MIME); // return mime type ala mimetype extension
$dateityp = finfo_file($finfo, $datei);
finfo_close($finfo);
break;
}}
return $dateityp;
}
function GetRealSize($datei) {
$size = filesize($datei);
$sizekb = $size / 1024;
$sizekb = round($sizekb,1)." KB";
$sizemb = ($size / 1024)/1024;
$sizemb = round($sizemb,2)." MB";
$sizegb = (($size / 1024)/1024)/1024;
$sizegb = round($sizegb,2)." GB";
if( $size >'1073741824') {return $sizegb;}
elseif($size >'100000') { return $sizemb; }
else { return $sizekb; }
}
// Fußnote
function FussNote(){
if ($_SERVER['SERVER_SIGNATURE']!= ""){
$fussnote = "<div style=\"text-align: center;\">".$_SERVER['SERVER_SIGNATURE']."</div>";
}
else {
$signatur = explode(" ", $_SERVER['SERVER_SOFTWARE']);
$fussnote = "<div style=\"text-align: center;\"><i><adress>$signatur[0] $signatur[1] Server at ".$_SERVER['HTTP_HOST']." Port ".$_SERVER['SERVER_PORT']."</adress></i></div>";
}
return $fussnote;
}
// Verzeichnis lesen
$handle = openDir($dir);
while ($file = readDir($handle)) {
$directory[(int) is_dir($file)][] = $file;
}
closeDir($handle);
foreach ($directory[1] as $datei) {
$ordnerliste[$datei] = filemtime($datei);
}
foreach ($directory[0] as $datei) {
$punkt = strrpos($datei, ".");
$ext = substr($datei, $punkt+1, 4);
$dateiliste[$datei] = filesize($datei);
$dateitypliste[$datei] = DateiTyp($datei,$ext);
$dateitlistetime[$datei] = filemtime($datei);
}
// Sort by
// Name
if($_GET["N"] == "D"){
krsort($dateiliste);
krsort ($ordnerliste);
$name = '<A HREF="?N=A">Name</A>';
$size = '<A HREF="?S=A">Size</A>';
$description = '<A HREF="?D=A">Description</A>';
$datum = '<A HREF="?M=A">Last modified</A>';
}
elseif ($_GET["N"] == "A"){
ksort($dateiliste);
ksort ($ordnerliste);
$name = '<A HREF="?N=D">Name</A>';
$size = '<A HREF="?S=A">Size</A>';
$description = '<A HREF="?D=A">Description</A>';
$datum = '<A HREF="?M=A">Last modified</A>';
}
else {
ksort($dateiliste);
ksort ($ordnerliste);
$name = '<A HREF="?N=D">Name</A>';
$size = '<A HREF="?S=A">Size</A>';
$description = '<A HREF="?D=A">Description</A>';
$datum = '<A HREF="?M=A">Last modified</A>';
}
// Size
if($_GET["S"] == "A"){
asort($dateiliste);
ksort ($ordnerliste);
$size = '<A HREF="?S=D">Size</A>';
$name = '<A HREF="?N=A">Name</A>';
$description = '<A HREF="?D=A">Description</A>';
$datum = '<A HREF="?M=A">Last modified</A>';
}
if($_GET["S"] == "D"){
arsort($dateiliste);
ksort ($ordnerliste);
$size = '<A HREF="?S=A">Size</A>';
$name = '<A HREF="?N=A">Name</A>';
$description = '<A HREF="?D=A">Description</A>';
$datum = '<A HREF="?M=A">Last modified</A>';
}
// Description
if ($_GET["D"] == "D"){
$dateiliste = $dateitypliste;
arsort($dateiliste);
ksort ($ordnerliste);
$description = '<A HREF="?D=A">Description</A>';
$name = '<A HREF="?N=A">Name</A>';
$size = '<A HREF="?S=A">Size</A>';
$datum = '<A HREF="?M=A">Last modified</A>';
}
if ($_GET["D"] == "A"){
$dateiliste = $dateitypliste;
asort($dateiliste);
ksort ($ordnerliste);
$description = '<A HREF="?D=D">Description</A>';
$name = '<A HREF="?N=A">Name</A>';
$size = '<A HREF="?S=A">Size</A>';
$datum = '<A HREF="?M=A">Last modified</A>';
}
// Last modified
if ($_GET["M"] == "A"){
$dateiliste = $dateitlistetime;
asort($dateiliste);
asort ($ordnerliste);
$datum = '<A HREF="?M=D">Last modified</A>';
$name = '<A HREF="?N=A">Name</A>';
$size = '<A HREF="?S=A">Size</A>';
$description = '<A HREF="?D=A">Description</A>';
}
if ($_GET["M"] == "D"){
$dateiliste = $dateitlistetime;
arsort($dateiliste);
arsort ($ordnerliste);
$datum = '<A HREF="?M=A">Last modified</A>';
$name = '<A HREF="?N=A">Name</A>';
$size = '<A HREF="?S=A">Size</A>';
$description = '<A HREF="?D=A">Description</A>';
}
// Ausgabe
// Oben
echo "<h2>Index of /".substr(getcwd(), 9)."</h2>\n";
echo "<table>\n<tr><th><img src=\"$iconordner/blank.gif\" height=\"$iconheight\" width=\"$iconwidth\" alt=\"[ICO]\"></th><th>$name</th><th>$datum</th><th>$size</th><th>$description</th></tr>\n<tr><th colspan=\"5\"><hr></th></tr>\n";
echo "<tr><td valign=\"top\"><img src=\"$backicon\" height=\"$iconheight\" width=\"$iconwidth\" alt=\"[DIR]\"></td><td><a href=\"../\"><strong>Parent Directory</strong></a></td><td style=\"text-align:center;\"> - </td><td style=\"text-align:center;\"> - </td><td style=\"text-align:center;\"> - </td></tr>\n";
// Verzeichnisse und Unterverzeichnisse ausgeben
foreach ($ordnerliste as $datei => $val) {
if ($datei != "." && $datei != "..") {
echo "<tr><td valign=\"top\"><img src=\"$foldericon\" height=\"$iconheight\" width=\"$iconwidth\" alt=\"[DIR]\"></td><td><a href=\"$datei\"><strong>$datei</strong></a></td><td>".date('d-M-Y',$val)."</td><td style=\"text-align:center;\"> - </td><td style=\"text-align:center;\"> - </td></tr>\n";
}
}
// Dateien ausgeben
foreach ($dateiliste as $datei => $val){
$datei_name = $datei;
$punkt = strrpos($datei, ".");
$ext = substr($datei, $punkt+1, 4);
if ($endung != "yes") $datei_name = substr($datei, 0, $punkt);
if (!stristr($datei, ".php")) { // PHP und HTML ausfiltern, wie z.b. index.html
if (!stristr($datei, ".html")) {
if (!stristr($datei, ".htaccess")) { // .htaccess sowieso ausfiltern
echo "<tr><td valign=\"top\"><img src=\"".DateiIcons($datei,$ext)."\" alt=\"[$ext]\" height=\"$iconheight\" width=\"$iconwidth\"></td><td><a href=\"$datei\">$datei_name</a></td><td>".date('d-M-Y', filemtime($datei))."</td><td align=\"right\">".GetRealSize($datei)."</td><td>".DateiTyp($datei,$ext)."</td></tr>\n";
}
}
}
}
// Unten
echo "<tr><th colspan=\"5\"><hr></th></tr>\n</table>\n<address>".FussNote()."</address>";
?>