Tom: Dateibaum auslesen ohne Endlosschleife

Beitrag lesen

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