[PHP] alle Ordner mit Unterordner anzeigen

  • PHP

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von sandiro.

    [PHP] alle Ordner mit Unterordner anzeigen

    moin leute

    ich hab ein kleines problem.
    ich möchte mir nun alle Ordner und Unterordner anzeigen lassen.
    das Problem dabei ist leider das einige Ordner auch "LEER" sein können (dies hat ein Grund)

    leider bekomm ich es nicht hin das es mir auch die Leeren Ordner anzeigt.
    bin leider nicht der Profi in PHP wesshalb ich mir das leider nicht selber bauen kann... im netz findet man immer das gleich... allerdings leider ohne unterordner oder die leeren ordner werden nich angezeigt.
    Hm.. einem Script, dass Ordner inkl. Unterordner durchläuft, ist es eigentlich egal, ob ein Ordner Dateien/Ordner enthält oder nicht.

    PHP-Quellcode

    1. <?php
    2. showFolders("test");
    3. function showFolders($directory) {
    4. $dirHandle = dir($directory);
    5. while (($f = $dirHandle->read()) != false) {
    6. if ($f != "." && $f != ".."){
    7. $path = $directory.'/'.$f;
    8. if (is_dir($path)){
    9. echo "<em>".$f."</em><br />";
    10. showFolders($path);
    11. }
    12. }
    13. }
    14. $dirHandle->close();
    15. }
    16. ?>

    PHP-Quellcode

    1. <?php
    2. class Folders{
    3. public function getFolders($sName){
    4. $aDirs = array();
    5. if(is_dir($sName)){
    6. $files = scandir($sName);
    7. foreach($files as $iKey => $sFileName){
    8. if($sFileName != "." && $sFileName != ".."){
    9. $sDirName = $sName.DIRECTORY_SEPARATOR.$sFileName;
    10. if(is_dir($sDirName)){
    11. $aSubFolders = $this->getFolders($sDirName);
    12. $aDirs[$sFileName] = $aSubFolders;
    13. $aDirs[$sFileName] += $this->getFiles($sDirName);
    14. }else{
    15. if(!is_Array($sFileName)){
    16. $aDirs[$sFileName] = filetype($sDirName);
    17. }
    18. }
    19. }
    20. }
    21. }
    22. return $aDirs;
    23. }
    24. private function getFiles($sDirName){
    25. $aFiles = array();
    26. if(is_dir($sDirName)){
    27. foreach(scandir($sDirName) as $sSubFile){
    28. if($sSubFile != "." && $sSubFile != ".." && !is_dir($sSubFile)){
    29. $aFiles[$sSubFile] = filetype($sDirName.DIRECTORY_SEPARATOR.$sSubFile);
    30. }
    31. }
    32. }
    33. return $aFiles;
    34. }
    35. }
    36. $obj = new Folders();
    37. $result = $obj->getFolders("/Volumes/");


    Simple rekursive Methode. Zeigt dazu auch ebenfalls Dateityp und andere Dateien die in einem der Ordner liegen zusätzlich zu den Ordnernamen.
    @sandiro
    vielen dank für deine hilfe
    deine methode funktioniert soweit. wäre es aber auch möglich das die unterordner mit dem phat angezeigt werden? also zb so
    ordner1
    ordner1/unterordner1
    ordner1/unterordner2
    ordner2
    ordner2/unterordner2
    ...
    im mom sieht es so aus
    ordner1
    unterordner1
    ordner2
    ...
    würdest du mir auch code code noch erklären wie der genau funktioniert?


    @N3X
    dein script zeige mir nichts an. keine fehlermeldung und auch keinen text...
    habe getfolders umbenannt aber hat nichts gebracht :D

    MVN050 schrieb:


    @N3X
    dein script zeige mir nichts an. keine fehlermeldung und auch keinen text...
    habe getfolders umbenannt aber hat nichts gebracht :D

    Ist ja auch logisch, du musst den Rückgabeparameter natürlicherweise auch schon auswerten ;) sonst wird das nichts. Wie bei nativen PHP-Funktionen eben auch der Fall ist.
    und die Variable $result beinhaltet dahingehend die Rückgabe der Methode von der Klasse Folders (Grundlagen PHP), am Rande aus der Notation gehen die Datentypen hervor.
    @MVN050
    Ändere einfach Zeile 12 ab in: echo "<em>".$path."</em><br />";
    [line]​[/line]
    Du rufst die Funktion "showFolders" auf und gibts dabei den ersten Ordner (in dem du alle Unterordner auflisten willst) mit.
    Innerhalb der Funktion durchläufst du dann mit der while-Schleife alle Ordner in dem angegebenen Ordner (Unterordner werden so aber nicht ausgelesen).

    Innerhalb der Schleife steht dir über "$f" (eine Variable) der aktuelle Ordnername zur Verfügung. Dann musst du zuerst prüfen, ob es sich nicht um "." oder ".." handelt (falls du schon mal mit einem FTP-Client gearbeitet hast, kennst du das: der Ordner ".." führt dich zum übergeordneten Verzeichnis), denn diese darfst du nicht angezeigen.

    "is_dir" erklärt sich von selber (prüft, ob es ein Ordner ist oder nicht) und falls ja, gibst du den Namen aus. Da mit der while-Schleife wie gesagt nur ein Verzeichnis durchlaufen wird (also ohne Unterordner), musst du die Funktion nochmals aufrufen und übergibst den aktuellen Ordnerpfad. Dies nennt sich rekursive Programmierung (das ist eine Funktion, die sich immer selber wieder Aufruft).