17735
Goto Top

Dateien auslesen und sortieren

Hallo,

auf folgende Weise lese ich mit PHP den Inhalt eines Verzeichnisses aus:

$pfad = "data";  
$dirhandle = opendir($pfad);

while($file = readdir($dirhandle)) {
            
                if($file != "." AND $file != ".." AND $file != ".htaccess") {  
                
                    $filename = $file;
                    $filesize = round(filesize("$pfad/$file") / 1024);  
                    
                    if($filesize == 0) { $filesize = 1; }
                    
                    echo "<a href=\"$pfad/$filename\">$filename $filesize KB</a>";  
                    
                }
                
}

closedir($dirhandle);

Auf meinem lokalen XAMPP-Testsystem unter Windows klappt das auch wunderbar - wenn ich es beim Dienstleister einsetze, der Debian Linux verwendet, funktioniert das Skript zwar auch, es sortiert die Dateien dann aber nicht alphatetisch, sondern nach dem Änderungsdatum, so dass neu hochgeladene Dateien ganz unten stehen, obwohl sie vom Dateinamen und der alphabetischen Reihenfolge vielleicht viel höher stehen sollten.

Wie kann ich den Inhalt des Verzeichnisses beim Auslesen nach dem Namen ordnen?

Gruß,
Ahnenforscher

Content-Key: 60986

Url: https://administrator.de/contentid/60986

Printed on: April 19, 2024 at 19:04 o'clock

Member: Guenni
Guenni Jun 10, 2007 at 17:35:41 (UTC)
Goto Top
@17735

Hi,

dann speichere die gefundenen Dateien in ein Array,
und lass dieses sortieren.

$pfad = ".";  
$dirhandle = opendir($pfad);
while($file = readdir($dirhandle)) {
 if($file != "." AND $file != ".." AND $file != ".htaccess")) {  
  $filename = $file;
  $filesize = round(filesize("$pfad/$file") / 1024);  
  if($filesize == 0) { $filesize = 1; }
	// Dateien in ein Array ablegen
  $file_array=array($filename,$filesize);
 }
}
closedir($dirhandle);
// Funktion mit Sortierkriterien,
// wird von usort benötigt
function cmp($a, $b) {
 $index = 0;  // hier kann man den index aendern
 if ($a[$index] == $b[$index]) return 0;
 return ($a[$index] > $b[$index])?1:-1;
}
// Die Funktion usort bekommt das Array und
// die zuvor definierte Funktion als Parameter
usort ($file_array, 'cmp');  
foreach($file_array as $file){
 echo "<a href=\"$pfad/$file\">$file  $file[1] KB</a><br>";  
}
Mitglied: 17735
17735 Jun 10, 2007 at 18:09:48 (UTC)
Goto Top
Hallo Günni,

danke für deine Antwort - es funktioniert bei mir aber nicht richtig.

Wenn im Verzeichnis 3 Dateien vorhanden sind, werden auch drei Einträge ausgegeben, allerdings 3 x der gleiche Dateiname und die gleiche Dateigröße.

Woran liegt das?

Gruß,
Ahnenforscher

PS: Die Idee mit dem Array finde ich ansonsten sehr gut.
Mitglied: 17735
17735 Jun 10, 2007 at 18:15:26 (UTC)
Goto Top
Ach mein Fehler ich Schnösel...hab den Index bzw. [1] hinter dem Arraynamen vergessen face-big-smile

Sorry

Meine letzte Frage wäre jetzt noch: Funktioniert das auch ohne die Berücksichtigung von Groß/Kleinschreibung? Unter Linux werden bei dieser Vorgehensweise nämlich zuerst die Dateien, die mit einem Großbuchstaben beginnen sortiert und dann die, die mit einem Kleinbuchstaben beginnen.

Gruß,
Ahnenforscher
Member: Guenni
Guenni Jun 11, 2007 at 10:13:02 (UTC)
Goto Top
@17735

Hi,

Meine letzte Frage wäre jetzt noch: Funktioniert das auch ohne die Berücksichtigung von Groß/Kleinschreibung?
Unter Linux werden bei dieser Vorgehensweise nämlich zuerst die Dateien, die mit einem Großbuchstaben beginnen
sortiert und dann die, die mit einem Kleinbuchstaben beginnen.

... ich denke mal, das würde 'ne ziemlich aufwändige Sache, da im Ascii-Code die Großbuchstaben
ja nun mal "kleiner" sind als die Kleinbuchstaben. Ich lege Dateien grundsätzlich in Kleinbuchstaben
an, da stellt sich das Problem erst garnicht.

Ach, und bevor jemand auf die Idee kommt: "Wandel doch alles in Kleinbuchstaben um, wenn
das Array gefüllt wird", also $file_array=array(strtolower($filename),$filesize);,
dann wird zwar alles richtig sortiert angezeigt, aber die Links, die du ausgibst, funktionieren
nicht mehr.

Gruß
Günni
Mitglied: 17735
17735 Jun 11, 2007 at 10:51:09 (UTC)
Goto Top
Ach, und bevor jemand auf die Idee kommt:
"Wandel doch alles in Kleinbuchstaben
um, wenn
das Array gefüllt wird", also
$file_array=array(strtolower($filename),$filesize);,
dann wird zwar alles richtig sortiert
angezeigt, aber die Links, die du ausgibst,
funktionieren
nicht mehr.

Gruß
Günni

Eben.

Naja, dann werde ich die Dateien nur mit Kleinbuchstaben benennen.

Vielen Dank für deine Hilfe,
Ahnenforscher