tomgk: opendir-Problem

Hallo,

Ich möchte ein Verzeichnis mitsampt Unterverzeicnise auflisten.
Mein Problem: Wie kann man wissen ob die Rückgabe von readir eine Datei oder ein Ordner ist?

MFg
tomgk

  1. Grüße,

    is_dir(), is_file() mehr in der docu php.net

    MFG
    bleicher

    1. Grüße,

      is_dir(), is_file() mehr in der docu php.net

      MFG
      bleicher

      thx für die schnelle Hilfe

  2. Hallo,

    Ich habe ein Problem beim Auflisten des Verzeichnisbaumes.

    Ich bin jetzt so weit:

    <html>
    <head>
      <title>tWeb</title>
      <link rel="icon" href="./favicon.ico" type="image/x-icon" />
      <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
    </head>
    <body>
    <style>
    img
    {
     position:relative;
     top:6px;
    }
    </style>
    <img src="Bilder/Icons/folder_open.gif">Main<br>
    <?php
    $max=0;
     function sdir($dir, $vor)
     {
      global $max;

    $o = opendir($dir);
      $files = "";
      $gefunden="";
      //echo("DIR:".$dir."<br>");
      while ($gefunden = readdir($o))
      {
       if ($gefunden != "." && $gefunden != "..")
       {
        ++$max;

    if(is_dir($dir.'/'.$gefunden))
        {
         echo('<div style="position:relative;top:-'.($max*4.5).'">'.$vor.'<img src="Bilder/Icons/nend.gif"><img src="Bilder/Icons/folder_open.gif">'.$gefunden.'</div>');//Ordner-Sympol
         sdir($dir.'/'.$gefunden,$vor.'<img src="Bilder/Icons/sline.gif">');
        }

    else
         echo('<div style="position:relative;top:-'.($max*4.5).'px">'.$vor.'<img src="Bilder/Icons/nend.gif">'.$gefunden."</div>\n");//nend=Symbol

    }
      }

    }
        sdir('/oProgramme/xampp/htdocs/tWeb', '');
    ?>
     </body>
    </html>

    Zur Info:
    Bilder/Icons/ ist der Ordner mit den Sympolen(Ordnersymbol,...)
    folder_open.gif das Ordner-symbol
    sline.gif das Symbol |
    nend.gif das Abzweigungssymbol

    Das Problem: Wie kann man wissen wann kein |-Symbol mehr nötig ist?

    MfG
    tomgk

    1. Grüße,

      Das Problem: Wie kann man wissen wann kein |-Symbol mehr nötig ist?

      so gar nciht . du gibst das | aus, BEVOR du den ordner nach untervezeichnissen untersuchst. style es so um, dass der nicht nach sondern vor einem verzeichniss ausgegeben wird.

      MFG
      bleicher

  3. Hello,

    Ich möchte ein Verzeichnis mitsampt Unterverzeicnise auflisten.
    Mein Problem: Wie kann man wissen ob die Rückgabe von readir eine Datei oder ein Ordner ist?

    dafür gibt es die Funktion is_dir(). http://www.php.net/manual/de/function.is-dir.php

    Du musst nur darauf achten, _welchen_ Pfad Du für die Überprüfung übergibst.
    readdir() http://www.php.net/manual/de/function.readdir.php
    arbeitet (auch) relativ zum active working directory
    (pwd, getcwd() http://www.php.net/manual/de/function.getcwd.php),
    is_dir() möchte aber den vollständigen Pfad haben.

    Du hast aber in allen Dateisystemen, die Links zulassen, noch ein weiteres Problem zu handhaben: Abfangen eines zyklischen Verlaufes. Wenn ein Link im Verzeichnis auf ein höheres Verzeichnis verweist, würdest Du eine Endlosschleife produzieren.

    Da aber Links durchaus legitim sind, solltest Du, um die Endlosschleife zu vermeiden, die Directorynamen vorher mit realpath() http://www.php.net/manual/de/function.realpath.php expandieren und in einem Array einsammeln. Dieses kannst Du dann abarbeiten, um die Files zu finden.

    Dabei hilft Dir dann wieder is_file() http://www.php.net/manual/de/function.is-file.php

    Außerdem schau Dir mal glob() an http://www.php.net/manual/de/function.glob.php

    Es gibt auch einen Thread zum Thema Rekursion bzw. zyklischer Verlauf beim Dateibaum:

    http://forum.de.selfhtml.org/archiv/2007/12/t163759/#m1066568

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de