Ordner auslesen mit PHP

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Beispiele um Ordner mit PHP auszulesen
    == PHP Abwärtskompatiblität ==
    Mit PHP 5 ist eine neue Funktion namens scandir eingeführt worden um Ordner auszulesen. Soweit ich das überblicke arbeitet sie besser mit Streams. Die einzige offensichtliche Änderung ist dagegen nur eine sortierte Liste als Rückgabewert. Um den Code PHP4 kompatibel zu halten, definieren wir einen Nachbau der Funktion als Fallback Lösung, falls die Funktion noch unbekannt ist. In den Beispielen inkludieren wir die Funktion über die Datei scandir_fallback.php.

    Source Code

    1. if (!function_exists('scandir')) {
    2. function scandir($directory, $sorting_order=0) {
    3. if(!is_dir($directory)) {
    4. return false;
    5. }
    6. $files = array();
    7. $handle = opendir($directory);
    8. while (false !== ($filename = readdir($handle))) {
    9. $files[] = $filename;
    10. }
    11. closedir($handle);
    12. if($sorting_order == 1) {
    13. rsort($files);
    14. } else {
    15. sort($files);
    16. }
    17. return $files;
    18. }
    19. }
    Display All


    == Order auslesen ganz einfach ==
    Es ist ganz einfach einen Ordner mit PHP auszulesen. Hier zeige ich euch die einfachste Variante.
    Tragt für den Ordner einen . (Punkt) ein, dann wird der Inhalt des aktuellen Ordners ausgegeben. Mit .. (Punkt-Punkt) lest ihr den Ordner oberhalb des eigenen aus. Wer schon einmal auf der Konsole gearbeitet hat, kennt das.

    Source Code

    1. <?php
    2. require_once 'scandir_fallback.php';
    3. $folder = 'unterordner';
    4. $fileArray = scandir($folder);
    5. foreach($fileArray as $file) {
    6. echo $file.'<br />';
    7. }
    8. ?>



    == Nach Bearbeitungszeit sortieren ==
    Auf Basis dieses Skript lassen sich natürlich weitere Anwendungen programmieren..
    Wir können das fileArray auch um ein weiteres Element erweitern, dass wir mit beliebigen Informationen füttern können um danach zu sortieren. Es wird hier bewusst nicht der Schlüssel verwendet, da unterschiedliche Elemente mit dem selben Zeitschlüssel so nicht hätten aufgenommen werden können.

    Stattdessen schreiben wir eine eigene Vergleichsfunktion, die wir usort als Parameter übergeben.

    Source Code

    1. <?php
    2. require_once 'scandir_fallback.php';
    3. $folder = './';
    4. $fileArray = scandir($folder);
    5. foreach($fileArray as $i => $file) {
    6. $modified = filemtime($folder.$file); //Liefere Unix Zeitstempel
    7. $fileArray[$i] = array($modified, $file);
    8. }
    9. usort($fileArray, create_function('$a, $b', 'if ($a[0] == $b[0]) return 0; else return $a[0]>$b[0]? +1 : -1;'));
    10. foreach($fileArray as $row) {
    11. echo $row[1].'<br />';
    12. }
    13. ?>
    Display All



    == Rekursiv alle Unterordner auslesen ==
    Das letzte Beispiel ist schon ausgereifter. Es handelt sich um eine so genannte rekursive Methode. Die Funktion ruft sich selbst auf und stellt alle Ordner rekursiv dar.

    Source Code

    1. <?php
    2. require_once 'scandir_fallback.php';
    3. function ordnerinhalt($folder='.') {
    4. $content = "";
    5. foreach(scandir($folder) as $file) {
    6. if($file[0] != '.') { // Versteckte Dateien nicht anzeigen
    7. if(is_dir($folder.'/'.$file)) {
    8. $folderArray[] = $file;
    9. } else {
    10. $fileArray[] = $file;
    11. }
    12. }
    13. }
    14. // Erst die Ordner ausgeben
    15. if(isset($folderArray)) {
    16. foreach($folderArray as $row) {
    17. $content .= '<b>'.$row.'</b><br />';
    18. $content .= '<div style="padding-left:10px;color:#afafaf" />'; //Unterordner nach Rechts einrücken
    19. $content .= ordnerinhalt($folder.'/'.$row); // rekursive Funktion
    20. $content .= '</div>';
    21. }
    22. }
    23. // ...dann die Dateien ausgeben
    24. if(isset($fileArray)) {
    25. foreach($fileArray as $row) {
    26. $content .= '<a href="'.$folder.'/'.$row.'">'.$row.'</a><br />'; //Dateien verlinken
    27. }
    28. }
    29. // Rekursion ende
    30. return $content;
    31. }
    32. echo ordnerinhalt();
    33. ?>
    Display All


    == Demo ==
    Den Code findet ihr einmal sichtbar unter demo.easy-coding.de/php/reading-directory/ und als Zip Datei zum Download.

    28,070 times viewed

Comments 2

  • dynambee -

    Vermisse noch etwas die objektorientierten Möglichkeiten die seit der SPL möglich sind (DirectoryIterator).