Ordner auslesen mit PHP

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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.

    Quellcode

    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. }
    Alles anzeigen


    == 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.

    Quellcode

    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.

    Quellcode

    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. ?>
    Alles anzeigen



    == 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.

    Quellcode

    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. ?>
    Alles anzeigen


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

    34.426 mal gelesen

Kommentare 2

  • dynambee -

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