kann unlesbare Verzeichnisse nicht mit RecursiveDirectoryIterator überspringen

8

Ich möchte eine Liste aller Unterverzeichnisse bekommen und mein Code unten funktioniert, außer, wenn ich nur lesbar Berechtigungen für bestimmte Ordner haben.

In der Frage unten zeigt es, wie ein Verzeichnis mit RecursiveDirectoryIterator überspringen Kann ich RecursiveDirectoryIterator unlesbare Verzeichnisse überspringt? aber mein Code ist etwas anders hier und ich bin nicht in der Lage, das Problem zu umgehen.

%Vor%

Ich bekomme den Fehler

%Vor%

Ich habe versucht, es mit der akzeptierten Antwort in der anderen Frage zu ersetzen.

%Vor%

Allerdings wird dieser Code geben Sie mir eine Liste aller Verzeichnisse innerhalb von www wie ich will, wo ich falsch geht hier vor?

    
ak85 19.01.2013, 03:46
quelle

8 Antworten

6

Einführung

Das Hauptproblem mit Ihrem Code ist die Verwendung von CHILD_FIRST

FROM PHP DOC

  

Optionaler Modus Mögliche Werte sind

     
  • RecursiveIteratorIterator :: LEAVES_ONLY - Der Standardwert. Listet nur Blätter in Iteration.
  •   
  • RecursiveIteratorIterator :: SELF_FIRST - Listet Blätter und Eltern in Iteration auf, wobei die Eltern zuerst kommen.
  •   
  • RecursiveIteratorIterator :: CHILD_FIRST - Listet Blätter und Eltern in Iteration mit Blättern, die zuerst kommen.
  •   

Was Sie verwenden sollten, ist SELF_FIRST , so dass das aktuelle Verzeichnis enthalten ist. Sie haben auch vergessen, die optionalen Parameter RecursiveIteratorIterator::CATCH_GET_CHILD

hinzuzufügen

FROM PHP DOC

  

Optionale Markierung Mögliche Werte sind RecursiveIteratorIterator :: CATCH_GET_CHILD, die dann Ausnahmen ignorieren, die in Aufrufen von RecursiveIteratorIterator :: getChildren () ausgelöst wurden.

Ihr CODE wurde erneut besucht

%Vor%

Sie möchten wirklich CHILD_FIRST

Wenn Sie wirklich die CHILD_FIRST Struktur beibehalten wollen, dann empfehle ich Ihnen, ReadableDirectoryIterator

zu verwenden

Beispiel

%Vor%

Verwendete Klasse

%Vor%     
Baba 21.01.2013, 11:54
quelle
1

Ich habe folgende Verzeichnisstruktur eingerichtet:

%Vor%

Ich habe den folgenden Code ausgeführt (ich habe das Flag SKIP_DOTS hinzugefügt, um . und .. btw zu überspringen):

%Vor%

Es gibt Folgendes aus:

%Vor%

Dies funktioniert wie erwartet.

Aktualisieren

Hinzugefügt die Flags, die Sie in Ihrem ursprünglichen Beispiel hatten (obwohl ich glaube, dass diese sowieso Standard sind):

%Vor%

Ausgabe:

%Vor%     
Ja͢ck 21.01.2013 08:05
quelle
1
%Vor%

Dieser Code funktioniert 100% ...

Sie können diese Funktion einfach verwenden, um nach Dateien und Ordnern in Ihrem gewünschten Verzeichnis oder Laufwerk zu suchen. Sie müssen nur den Pfad des gewünschten Verzeichnisses in die Funktion eingeben. Der zweite Parameter der Funktion ist der vollständige Pfad der gescannten Dateien und Ordner. Falscher Wert des zweiten Parameters bedeutet, dass der vollständige Pfad nicht angezeigt wird.

Das Array $ ignore wird verwendet, um einen beliebigen Dateinamen oder Ordnernamen aus der Liste auszuschließen.

Die Funktion gibt das Array zurück, das die Liste der Dateien und Ordner enthält.

Diese Funktion überspringt die Dateien und Ordner, die während der Rekursion nicht lesbar sind.

    
yuva 26.04.2013 09:50
quelle
1
%Vor%     
Shashesh 27.04.2013 08:29
quelle
0

Die Funktion glob überspringt Lesefehler automatisch und sollte auch Ihren Code ein wenig vereinfachen. p>     

RayViljoen 21.01.2013 07:58
quelle
0

Wenn Sie unbehandelte Ausnahmen bekommen, warum bringen Sie diesen Code nicht in einen try-Block, mit einem Ausnahme-catch-Block, um Fehler zu finden, wenn er keine Verzeichnisse lesen kann? Nur ein einfacher Vorschlag, indem Sie Ihren Code und Ihr Problem betrachten. Es gibt wahrscheinlich einen besseren Weg, es in PHP zu tun.

    
Munim 21.01.2013 08:03
quelle
0

Sie müssen SELF_FIRST constant verwenden, wenn Sie den Namen des unlesbaren Verzeichnisses zurückgeben möchten. Wenn Sie CHILD_FIRST ausführen, versucht es, in das Verzeichnis zu gelangen, schlägt fehl und der aktuelle Verzeichnisname ist nicht enthalten.

%Vor%     
German Rumm 21.01.2013 10:20
quelle
0

Was ist mit try? Fange die UnexpectedValueException. Vielleicht gibt es sogar einen eindeutigen Ausnahmecode für diesen Fehler, den Sie überprüfen können. Andernfalls können Sie die Ausnahmebedingungsnachricht für "Berechtigung verweigert" analysieren.

Ich würde vorschlagen, die Ссылка

zu prüfen     
Jens Peters 21.01.2013 17:25
quelle

Tags und Links