php.de

Zurück   php.de > Lösungen durch Skripte > Scriptbörse

Scriptbörse PHP Lösungen für nen schmalen Taler

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.10.2009, 19:36  
Neuer Benutzer
 
Registriert seit: 14.10.2009
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Schiwi befindet sich auf einem aufstrebenden Ast
Standard FancyIndexing per PHP

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&nbsp;Systems&nbsp;Format";
        break;
    case 
"flv":
    
$dateityp "Adobe&nbsp;Flash&nbsp;Video"
    break;
     case 
"mp4":
    
$dateityp "PSP,&nbsp;iPod,&nbsp;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)."&nbsp;KB";
    
$sizemb = ($size 1024)/1024;
    
$sizemb round($sizemb,2)."&nbsp;MB";
    
$sizegb = (($size 1024)/1024)/1024;
    
$sizegb round($sizegb,2)."&nbsp;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+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>\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+14);
  if (
$endung != "yes"$datei_name substr($datei0$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>";

?>
Schiwi ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.10.2009, 22:26  
Neuer Benutzer
 
Registriert seit: 11.05.2008
Beiträge: 6
register_global befindet sich auf einem aufstrebenden Ast
Standard

Hallo,
mein erster Eindruck, ohne Blick auf die Funktionalität: schlecht

Zitat:
Zitat von Schiwi Beitrag anzeigen
PHP-Code:
// englisch:
$dir ".";
// deutsch, mit englischen Werten, benutz BOOL, nichts ist schlimmer als
// "no" als String, weil (bool)"no" TRUE ist
$endung "yes"// Dateierweiterung anzeigen? yes|no
// benutz CamelCase oder so_etwas, zusammenschreiben ist unleserlich
$iconordner "/icons";
// ..
// 22 ist eine Zahl, du solltest die " weglassen
$iconheight "22";

// ich sag mal so, üüüblicherweise beginnen Funktionsnamen klein, DateiIcons()
// ist ein ziemlich nichtssagender Name, gibt die Funktion etwas zurück, macht sie
// echo-Ausgaben?
function DateiIcons($datei,$ext){
// global ist ein K.O.-Kriterium für gute Bewertungen
  
global $iconordner;
// ..
// du benutzt Entities und legst dich damit auf HTML als Ausgabe fest, zugegeben
// sinnvoll bei FancyIndexing, trotzdem unnötig früh an dieser Stelle
         
$dateityp "Advanced&nbsp;Systems&nbsp;Format";
        break;
// ..
// ist finfo_open nicht PECL bzw. PHP 5.3? Damit ist das Skript fast wertlos (noch)
    
$finfo finfo_open(FILEINFO_MIME); 
// .. 
// wieder englisch also, zumindest der Funktionsname:
function GetRealSize($datei) {
// warum berechnest du hier schon alle Formate, wenn du doch nur eins brauchst?
// ..
// eine Zahl ist kein String
    
if( $size >'1073741824') {return $sizegb;}
// ..
// doch wieder deutsch, bring da auf jeden Fall mal Linie rein:
function FussNote(){
// auch Superglobale solltest du zumindest für Testzwecke als Parameter übergeben
  
if ($_SERVER['SERVER_SIGNATURE']!= ""){ 
// HTML in doppelten Anführungszeichen ist schlimm, beende PHP ? > oder benutz die
// Heredoc Syntax, Templates, irgendwas, aber kein Inline-HTML ..
      
$fussnote "<div style=\"text-align: ">; 
// ..
// wenn kein Unterverzeichnis gefunden wird sollte dir die nächste Schleife gegen die
// Wand flitzen
$handle openDir($dir);
while (
$file readDir($handle)) { 
// warum nicht if (is_dir($file)) { .. } ? Fände ich sauberer
    
$directory[(int) is_dir($file)][] = $file
}
closeDir($handle);
// ..
// es gibt auch Dateien ohne Punkt ..
    
$punkt strrpos($datei"."); 
    
$ext substr($datei$punkt+14);
    
$dateiliste[$datei] =  filesize($datei);
    
$dateitypliste[$datei] = DateiTyp($datei,$ext);
    
$dateitlistetime[$datei] = filemtime($datei);
}
// ..
// warum plötzlich große TAGNAMEN?
    
$name '<A HREF="?N=A">Name</A>';
// ..
// $_GET als Parameter übergeben!
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>';
}
// findest du nicht, dass es hier auffallend viele Gemeinsamkeiten im Code gibt ..
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>';
}
// und wieder ..
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>';
}
// und nochmal
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>';
}
// ..
// Beende die Ausgabe von PHP mit ? > und schreib normal HTML, das ist sowas
// von wartungsunfreundlich ..
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"
Nicht falsch verstehen, du hast gefragt, ich habe geantwortet, finds gut wenn das Forum hier etwas gefüllt wird

Geändert von Chriz (14.10.2009 um 22:34 Uhr). Grund: ich erlaube mir meinen eigenen Inkognito-"Passwort vergessen"-Pseudonym-Beitrag zu editieren, damit es leserlicher wird
register_global ist offline   Mit Zitat antworten
Alt 15.10.2009, 08:14  
Neuer Benutzer
 
Registriert seit: 14.10.2009
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Schiwi befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von register_global Beitrag anzeigen
nichts ist schlimmer als
// "no" als String, weil (bool)"no" TRUE ist
ok, guter Einwand

Zitat:
Zitat von register_global Beitrag anzeigen
// global ist ein K.O.-Kriterium für gute Bewertungen
Aha, wusste nicht das global nicht gern gesehen ist
PHP-Code:
// So besser?
 
$GLOBALS['iconordner']; 
Zitat:
Zitat von register_global Beitrag anzeigen
DateiIcons() ist ein ziemlich nichtssagender Name
Na und?

Zitat:
Zitat von register_global Beitrag anzeigen
ist finfo_open nicht PECL bzw. PHP 5.3?
Sicher, doch wenn jemand kein PECL hat soll er es sich installieren oder den code ausklammern
Für mich funktioniert es bestens

Zitat:
Zitat von register_global Beitrag anzeigen
// $_GET als Parameter übergeben!
Hier brauch ich mal kurz ne Erklärung

Zitat:
Zitat von register_global Beitrag anzeigen
wenn kein Unterverzeichnis gefunden wird
Dieses Script wird wohl kaum aufgerufen ohne in einem Verzeichnis zu sein

Zitat:
Zitat von register_global Beitrag anzeigen
// findest du nicht, dass es hier auffallend viele Gemeinsamkeiten im Code gibt ..
Ja sicher, doch mir fällt keine Alternative ein, was würdest du mir raten?
Schiwi ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
request_uri ohne query_string für FancyIndexing mit SSI Simbo Server, Hosting und Workstations 2 18.04.2007 19:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php fancy index, fancyindexing php, fancyindexing, fancy indexing, php fancy indexing, apache fancyindexing align right size, htaccess fancyindexing, fancyindexing alternative, apache fancy index php, apache fancy index, php ordnerliste, fancyindex php, php fancyindexing, ohne fancyindexing, fancyindexing via php, fancyindexing style, fancyindexing apache2 php5, ersatz für fancyindexing, fancyindexing icon ordner, apache fancyindexing templates

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:35 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum