Verzeichniss rekursiv auslessen

Hallo Leute,

Hab ein script der mir einverzeichniss rekursiv auslessen soll, in ein array schreiben soll.
Leider schreibt der script immer nur das letzte verzeichniss in den array nicht alle verzeichnisse!
Weiss da jemand rat?

<?php global $stack;
$stack = array(); function dir\_rekursiv($verzeichnis,$stack) { $handle = opendir($verzeichnis); while ($datei = readdir($handle)) { if ($datei != "." && $datei != "..") { if (is\_dir($verzeichnis.$datei)) // Wenn Verzeichniseintrag ein Verzeichnis ist { // Erneuter Funktionsaufruf, um das aktuelle Verzeichnis auszulesen dir\_rekursiv($verzeichnis.$datei.'/',$stack); } else { if (substr(strtolower($datei), 0, 4)=="free") { // Wenn Verzeichnis-Eintrag eine Datei ist, diese ausgeben array\_push($stack, $verzeichnis.$datei); echo $verzeichnis.$datei.' '; } } } } closedir($handle); return $stack; } $files = dir\_rekursiv("Z:\\Internet\\Favoriten\\",$stack); print\_r($files); ?\>

Hallo Manfred,

auf die schnelle und ohne zu testen würde ich sagen, weil er den ‚else‘-Bereich in den oberen Verzeichnis-Etagen nicht erreicht.

Sobald er ein Verzeichnis gefunden hat, geht er nur in den ersten Teil der If-Schleife um das Unterverzeichnis zu holen. Erst im tiefsten Verzeichnis geht er in den zweiten Teil und kehrt danach zurück in den ersten If-Teil. Denn zweiten Teil überspringt er dann natürlich.

Ich denke mal, ohne ein ‚else‘ würde es funktionieren. Dann käme er aus den Unteraufruf zurück und würde die Dateien des aktuellen Verzeichnisses ausgeben.

Aber wie geschrieben, nicht getestet.

Gruß Jörg

Hallo Jörg,

Ich denke mal, ohne ein ‚else‘ würde es funktionieren. Dann
käme er aus den Unteraufruf zurück und würde die Dateien des
aktuellen Verzeichnisses ausgeben.

Hab die ‚else‘ weg gelassen, hilft nicht. Trotzdem Danke.

Gruß Fred

Hallo Fred,

> Hab die ‚else‘ weg gelassen, hilft nicht.
> Trotzdem Danke.

Mea culpa, mea maxima culpa.
Du hast natürlich recht. Das nächste mal sollte ich besser testen und dann schreiben.

Nun aber ein zweiter Versuch.

Bei mir hat es geklappt, wenn ich entweder $stack in der Function auch als global definiere oder wenn ich den $stack-Parameter als Referenz aufrufe.
(function dir_rekursiv($verzeichnis, & $stack)).

Falls das auch nicht hilft, lasse ich das Antworten schreiben wohl besser sein.

Gruß Jörg

Hallo Jörg,

Bei mir hat es geklappt, wenn ich entweder $stack in der
Function auch als global definiere oder wenn ich den
$stack-Parameter als Referenz aufrufe.
(function dir_rekursiv($verzeichnis, & $stack)).

Falls das auch nicht hilft, lasse ich das Antworten schreiben
wohl besser sein.

Brauchst nicht, & $stack das wars.
Jetzt funzt.

Danke Fred