<?php
###############################################################################
# PHP Verzeichnis auslesen
# Directory-Listings des Apache anpassen (FancyIndexing)
# Script zum auslesen von Verzeichnissen und anzeigen der Dateitypen 
# Dient dazu FancyIndexing von Apache zu ersetzen
###############################################################################
# Dieses Programm ist freie Software. Sie können es weitergeben und/oder 
# nach Ihren Anforderungen modifizieren
#
#################### Einstellungen ############################################
#
$iconordner "/icons";
$foldericon "$iconordner/folder.gif";
$backicon "$iconordner/back.gif";
$iconheight 22;
$iconwidth 20;
#
################################################################################

function DateiIcons($datei,$ext){
  
$iconordner $GLOBALS['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;
    case 
"3gp":
    
$icon "$iconordner/movie.gif"
        break;
    case 
"mpeg":
    
$icon "$iconordner/movie.gif"
        break;
    case 
"mpg":
    
$icon "$iconordner/movie.gif"
        break;
    case 
"pdf":
    
$icon "$iconordner/pdf.gif"
        break;
    case 
"txt":
    
$icon "$iconordner/text.gif"
        break;
    case 
"mp3":
    
$icon "$iconordner/sound2.gif"
        break;
    case 
"MP3":
    
$icon "$iconordner/sound2.gif"
        break;
    case 
"mp+":
    
$icon "$iconordner/sound2.gif"
        break;
    case 
"aac":
    
$icon "$iconordner/sound1.gif"
        break;
    case 
"zip":
    
$icon "$iconordner/compressed.gif"
        break;
    case 
"tar":
    
$icon "$iconordner/tar.gif"
        break;
    case 
"gz":
    
$icon "$iconordner/tar.gif"
        break;
    case 
"bz2":
    
$icon "$iconordner/tar.gif"
        break;
    case 
"sh":
    
$icon "$iconordner/c.gif"
        break;
    case 
"odt":
    
$icon "$iconordner/layout.gif"
        break;
    case 
"doc":
    
$icon "$iconordner/layout.gif"
        break;
    case 
"avi":
    
$icon "$iconordner/movie.gif"
        break;
    case 
"jpeg":
    
$icon "$iconordner/image2.gif";
        break;
    case 
"jpg":
    
$icon "$iconordner/image2.gif";
        break;
    case 
"swf":
    
$icon "$iconordner/flash.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&nbsp;Systems&nbsp;Format";
        break;
    case 
"flv":
    
$dateityp "Adobe&nbsp;Flash&nbsp;Video"
    break;
     case 
"mp4":
    
$dateityp "PSP,&nbsp;iPod,&nbsp;Zune"
        break;
    case 
"3gp":
    
$dateityp "Handy&nbsp;Video";
        break;
    case 
"aac":
    
$dateityp "Handy&nbsp;Audio";
        break;
    case 
"mpeg":
    
$dateityp "MPEG&nbsp;Video";
        break;
    case 
"mpg":
    
$dateityp "MPEG&nbsp;Video";
        break;
    case 
"mp3":
    
$dateityp "MPEG-1&nbsp;Audio&nbsp;Layer&nbsp;3";
        break;
    case 
"MP3":
    
$dateityp "MPEG-1&nbsp;Audio&nbsp;Layer&nbsp;3";
        break;
    case 
"pdf":
    
$dateityp "Portable&nbsp;Document&nbsp;Format";
        break;
    case 
"odt":
    
$dateityp "OpenDocument&nbsp;Text&nbsp;Document";
    break;
    case 
"txt":
    
$dateityp "Textdatei";
        break;
    case 
"wmv":
    
$dateityp "Windows&nbsp;Media&nbsp;Video";
    break;
    case 
"avi":
    
$dateityp "AVI&nbsp;Video";
    break;
    case 
"jpg":
    
$dateityp "JPEG&nbsp;Bilddatei";
    break;
    case 
"png":
    
$dateityp "Portable&nbsp;Network&nbsp;Graphics";
    break;
    case 
"zip":
    
$dateityp "zip&nbsp;archive";
    break;
    case 
"deb":
    
$dateityp "Debian&nbsp;archive";
    break;
    case 
"mp+":
     
$dateityp "Musepack-Audiodatei";
     break;
    case 
"jpeg":
    
$dateityp "JPEG&nbsp;Bilddatei";
    break;
    case 
"gz":
    
$dateityp "gzip&nbsp;archive";
    break;
    case 
"tar":
    
$dateityp "tar&nbsp;archive";
    break;
    case 
"bz2":
    
$dateityp "bz2&nbsp;archive";
    break;
    case 
"swf":
    
$dateityp "Adobe&nbsp;ShockWave&nbsp;Flash";
    break;
     default:    
// wenn unbekannt, return FILEINFO_MIME, benötigt PECL oder PHP 5.3
    
$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);
    if( 
$size 1073741824) {
    
$sizegb = (($size 1024)/1024)/1024;
    
$sizegb round($sizegb,2)."&nbsp;GB";
      return 
$sizegb;
}
    elseif(
$size 100000) { 
    
$sizemb = ($size 1024)/1024;
    
$sizemb round($sizemb,2)."&nbsp;MB";
        return 
$sizemb
}
    else { 
      
$sizekb $size 1024;
      
$sizekb round($sizekb,1)."&nbsp;KB";
      return 
$sizekb
    }
}
// Fußnote
function FussNote(){
  if (isset(
$_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
foreach (glob('*') as $datei){
      if (
is_dir($datei)){
      
$ordnerliste[$datei] = filemtime($datei);
      }    
      else {
    
$punkt strrpos($datei"."); 
    
$ext substr($datei$punkt+14);
    
$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
<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>
<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>
TABLE;

//  Verzeichnisse und Unterverzeichnisse ausgeben
 
if (isset($ordnerliste)){
    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){
    
$punkt strrpos($datei"."); 
    
$ext substr($datei$punkt+14);
    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</a></td><td>".date('d-M-Y'filemtime($datei))."</td><td align=\"right\">".GetRealSize($datei)."</td><td>".DateiTyp($datei,$ext)."</td></tr>\n";
    }
      }
    }
}

echo 
"<tr><th colspan=\"5\"><hr></th></tr>\n</table>\n<address>".FussNote()."</address>";


?>