In diesem Artikel werden gemeinsame Aufgaben in der Entwicklung von PHP -Anwendungen erörtert: Auflisten von Dateien und Verzeichnissen. Wir werden mehrere grundlegende und fortschrittliche Lösungen einführen und ihre Vor- und Nachteile analysieren. Zunächst werden wir drei Möglichkeiten zur Verwendung grundlegender PHP -Funktionen einführen und dann nach und nach zu einer leistungsstärkeren Möglichkeit, SPR -Iteratoren zu nutzen. Aus Gründen der Diskussion gehen wir davon aus, dass die Verzeichnisstruktur wie folgt lautet:
<code>---manager | ---user | ---document.txt | ---data.dat | ---style.css |---article.txt |---master.dat |---script.php |---test.dat |---text.txt</code>
glob()
, opendir()
, readdir()
, closedir()
, scandir()
und FilesystemIterator
Standard-PHP-Bibliothek (SPL) bietet objektorientierte Lösungen für Listendateien und Verzeichnisse, einschließlich RecursiveDirectoryIterator
, GlobIterator
und glob()
opendir()
Funktionen sind eine Einzeilungslösung, die die Filterung ermöglicht, aber keine Flexibilität hat. Stattdessen bieten readdir()
, closedir()
und scandir()
GlobIterator
Funktionen erfordern auch nach der Filmfilterung, müssen jedoch keine Dateihandles verwalten. Für objektorientierte Methoden sollte die SPL-Bibliothek verwendet werden. RegexIterator
Ermöglicht die Vorfilterung, während andere Iteratoren
glob()
Der erste Satz von Methoden zeigt die Verwendung von opendir()
-Funktionen, die Kombination von Funktionen readdir()
, closedir()
und scandir()
und die Verwendung von
glob()
Verwendung
glob()
Die erste zu diskutierende Funktion ist
$pattern
$flags
*.txt
Lassen Sie uns einige Beispiele sehen! Um nach allen Dateien und Verzeichnissen zu suchen, die mit
<?php $filelist = glob("*.txt");
$filelist
Wenn Sie
<code>array ( 0 => 'article.txt', 1 => 'text.txt' )</code>
Wenn Sie eine Liste von Dateien und Verzeichnissen mit "TE" wünschen, ist der Code, den Sie schreiben möchten,:
<?php $filelist = glob("te*");
Die Ausgabe ist:
<code>array ( 0 => 'test.dat', 1 => 'text.txt' )</code>
Um nur die Liste der Verzeichnisse mit "MA" zu erhalten, lautet der Code wie folgt:
<?php $filelist = glob("*ma*", GLOB_ONLYDIR);
In diesem letzten Beispiel lautet die Ausgabe: <🎜>
<code>---manager | ---user | ---document.txt | ---data.dat | ---style.css |---article.txt |---master.dat |---script.php |---test.dat |---text.txt</code>
Beachten Sie, dass das letzte Beispiel die GLOB_ONLYDIR
Konstante als optionaler zweiter Parameter verwendet. Wie Sie sehen können, wird eine Datei namens master.dat
ausgeschlossen. Obwohl die glob()
-Funktion einfach zu bedienen ist, ist sie in einigen Fällen nicht flexibel. Zum Beispiel gibt es keine Flags, um nur Dateien abzurufen, die dem angegebenen Muster (nicht mit Verzeichnissen) übereinstimmen.
opendir()
und readdir()
Die zweite Methode zum Lesen von Dateien und Verzeichnissen, die ich diskutieren möchte, umfasst die Funktionen opendir()
, readdir()
und closedir()
. opendir()
Öffnen Sie das Verzeichnis und kehren Sie zum Verbindungsgriff zurück. Nachdem der Griff abgerufen wurde, können Sie readdir()
verwenden. Jedes Mal, wenn diese Funktion aufgerufen wird, gibt sie den Namen der nächsten Datei oder des Verzeichnisses im offenen Verzeichnis an. Nachdem alle Namen abgerufen wurden, gibt die Funktion false
zurück. Um den Griff zu schließen, können Sie closedir()
verwenden. Im Gegensatz zu glob()
ist dieser Ansatz etwas komplizierter, da Sie keine Parameter haben, mit denen Sie die zurückgegebenen Dateien und Verzeichnisse filtern. Sie müssen sich nach der Filterung machen, um das zu bekommen, was Sie wollen. Um parallel zur glob()
-Funktion zu sein, ruft das folgende Beispiel eine Liste aller Dateien und Verzeichnisse ab, beginnend mit "TE":
<?php $filelist = glob("*.txt");
Die Ausgabe ist die gleiche wie im vorherigen Beispiel. Wenn Sie jedoch den oben genannten Code ausführen und den Wert von $entry
zur Laufzeit ausgeben, werden Sie feststellen, dass er manchmal einige seltsame Einträge enthält: "." Und "..". Dies sind zwei virtuelle Verzeichnisse, die Sie in jedem Verzeichnis des Dateisystems finden. Sie repräsentieren das aktuelle Verzeichnis bzw. das übergeordnete Verzeichnis (den vorherigen Ordner). Das zweite Beispiel zeigt, wie nur Dateien abgerufen werden, die in einem bestimmten Pfad enthalten sind.
<code>array ( 0 => 'article.txt', 1 => 'text.txt' )</code>
Wie Sie vielleicht erraten haben, erzeugt die Verwendung des obigen Code die folgende Ausgabe:
<?php $filelist = glob("te*");
scandir()
Schließlich möchte ich die scandir()
-Funktion vorstellen. Es hat nur einen erforderlichen Parameter: den Pfad zum Lesen. Der Rückgabewert ist ein Array von Dateien und Verzeichnissen, die im Pfad enthalten sind. Wie bei der letzten Lösung müssen Sie zum Abrufen einer Teilmenge von Dateien und Verzeichnissen selbst nach dem Filter durchführen. Wie Sie aus dem folgenden Code sehen, ist diese Lösung hingegen einfacher und erfordert keine Verwaltung von Dateihandles. In diesem Beispiel wird angezeigt, wie Dateien und Verzeichnisse abgerufen werden, beginnend mit der Zeichenfolge "TE":
<code>---manager | ---user | ---document.txt | ---data.dat | ---style.css |---article.txt |---master.dat |---script.php |---test.dat |---text.txt</code>
Lassen Sie uns jetzt über einige SPL -Iteratoren sprechen. Aber bevor wir in ihre Verwendung eintauchen, lassen Sie mich sie und die SPL -Bibliothek vorstellen. SPL bietet eine Reihe von objektorientierten Datenstrukturen, Iteratoren, Dateihandlern und anderen Klassen. Einer der Vorteile ist, dass Iteratoren Klassen sind, sodass Sie sie so erweitern können, dass Sie Ihren Anforderungen besser entsprechen. Ein weiterer Vorteil ist, dass sie sehr nützliche native Methoden haben, die Ihnen bei vielen gängigen Aufgaben helfen können, mit denen Sie möglicherweise konfrontiert sind, und Sie können sie an nur einem Ort finden. Beispielsweise werden beispielsweise readdir()
in FilesystemIterator
in einer Schleife verwendet. Wenn Sie jedoch readdir()
verwenden, ist Ihr Eintrag nur eine Zeichenfolge, und wenn Sie FilesystemIterator
verwenden oder Verzeichnis hat eine große Menge an Informationen (Größe, Eigentümer, Berechtigungen usw.). Natürlich kann PHP Funktionen wie filesize()
und fileowner()
verwenden, um Ihnen die gleichen Informationen zu geben, aber PHP5 hat seinen Ansatz zu OOP zugewandt. Alles in allem ist mein Rat, hier den neuen Best Practices der Sprache zu folgen. Wenn Sie allgemeinere Informationen zu SPR -Iteratoren benötigen, überprüfen Sie die SPL -Iteratoren. Wie in der Einführung angegeben, werde ich die Verwendung von FilesystemIterator
, RecursiveDirectoryIterator
und GlobIterator
zeigen. Die ersten Erben von DirectoryIterator
, während die anderen von FilesystemIterator
erben. Sie alle haben den gleichen Konstruktor, der nur zwei Parameter enthält:
$path
(erforderlich): Der Pfad des Dateisystemprojekts zur ITRETT $flags
(optional): Ein oder mehrere Flags, die in der offiziellen Dokumentation Der tatsächliche Unterschied zwischen diesen Iteratoren steht der Navigation auf einem bestimmten Weg.
FilesystemIterator
Die Verwendung von FilesystemIterator
ist sehr einfach. Um zu zeigen, wie praktisch es ist, werde ich zwei Beispiele zeigen. Im ersten Beispiel werde ich nach allen Dateien und Verzeichnissen suchen, die mit der Zeichenfolge "TE" beginnen, während das zweite Beispiel einen anderen Iterator RegexIterator
verwendet, um nach allen "T.Dat" oder "t. Dateien und Verzeichnissen zu suchen, die mit enden PHP ”. RegexIterator
verwendet, um einen anderen Iterator basierend auf regulären Ausdrücken zu filtern.
<?php $filelist = glob("*.txt");
Verwenden Sie den obigen Code, das Ergebnis ist das gleiche wie im vorherigen Beispiel. Das zweite Beispiel für die Verwendung von RegexIterator
ist:
<code>array ( 0 => 'article.txt', 1 => 'text.txt' )</code>
In diesem Fall ist die Ausgabe:
<code>---manager | ---user | ---document.txt | ---data.dat | ---style.css |---article.txt |---master.dat |---script.php |---test.dat |---text.txt</code>
RecursiveDirectoryIterator
RecursiveDirectoryIterator
bietet eine Schnittstelle zum rekursiven Iterieren des Dateisystemverzeichnisses. Aufgrund seines Ziels verfügt es über einige nützliche Methoden wie getChildren()
und hasChildren()
, die den Iterator für den aktuellen Eintrag (falls ein Verzeichnis sind) und ob der aktuelle Eintrag ein Verzeichnis ist. Um die praktische Anwendung von RecursiveDirectoryIterator
und getChildren()
zu zeigen, werde ich das letzte Beispiel neu schreiben, um dasselbe Ergebnis zu erzielen.
<?php $filelist = glob("*.txt");
GlobIterator
GlobIterator
iteriert das Dateisystem in ähnlicher Weise der glob()
-Funktion. Daher kann der erste Parameter eine Wildcard enthalten. Der folgende Code zeigt gemeinsame Beispiele für die Verwendung von GlobIterator
.
<code>array ( 0 => 'article.txt', 1 => 'text.txt' )</code>
In diesem Artikel veranschaue ich verschiedene Möglichkeiten, um dasselbe Ziel zu erreichen: wie Sie Dateien und Verzeichnisse auf einem bestimmten Pfad abrufen und filtern. Hier sind einige wichtige Punkte, an die Sie sich beachten sollten:
glob()
Funktionen sind eine Einzeilungslösung, die das Filtern ermöglicht, aber nicht sehr flexibel ist. opendir()
, readdir()
und closedir()
sind ein bisschen ausführlich und erfordern nach der Filterung, sind jedoch flexibler. scandir()
Funktionen erfordern auch nach der Filmfilterung, müssen jedoch keine Managementgriffe benötigen. GlobIterator
in der Lage ist, vorzuführen, können andere Iteratoren RegexIterator
verwenden, um dieselbe Funktionalität auf komfortable Weise zu erreichen. Kennen Sie andere Möglichkeiten, dies zu erreichen? Wenn ja und Sie mit uns teilen möchten, fahren Sie bitte fort. Kreatives Teilen ist immer beliebt. Bilder aus Fotolien
mit dem sort()
kann zum Sortieren von Dateien und Verzeichnissen in PHP verwendet werden. Nachdem Sie Dateien und Verzeichnisse mithilfe der Funktion scandir()
abgerufen haben, können Sie die Funktion sort()
anwenden, um sie in aufsteigender Reihenfolge anzuordnen. Wenn Sie sie in absteigender Reihenfolge sortieren möchten, können Sie die Funktion rsort()
verwenden. Denken Sie daran, die Datei- und Verzeichnisarrays als Parameter an diese Funktionen zu übergeben.
Um bestimmte Dateien oder Verzeichnisse auszuschließen, können Sie die Funktion in_array()
in Verbindung mit der Funktion scandir()
verwenden. in_array()
Funktion prüft, ob in einem Array ein Wert vorhanden ist. Sie können ein Array von Dateien oder Verzeichnissen erstellen, um die Funktion in_array()
zu überprüfen und zu überprüfen, ob die Datei oder das Verzeichnis im Array vorhanden sind. Wenn es existiert, können Sie es überspringen.
Um nur Verzeichnisse anstelle von Dateien aufzulisten, können Sie die Funktion is_dir()
verwenden. Diese Funktion prüft, ob ein Pfad ein Verzeichnis ist. Sie können dies in Verbindung mit der Funktion scandir()
verwenden, um zu überprüfen, ob jedes Element im Array, das von scandir()
zurückgegeben wird, ein Verzeichnis ist. In diesem Fall können Sie es in Ihre Liste einbeziehen.
Um Dateien und Verzeichnisse rekursiv aufzulisten, können Sie eine rekursive Funktion erstellen, die die Funktion scandir()
verwendet, um die Dateien und Verzeichnisse abzurufen, und ruft sich dann für jedes von ihm fundierte Verzeichnis auf. Dadurch kann es den gesamten Verzeichnisbaum durchqueren.
Um die Größe jeder Datei zu erhalten, können Sie die Funktion filesize()
verwenden. Diese Funktion gibt die Dateigröße in Bytes zurück. Sie können dies in Verbindung mit der Funktion scandir()
verwenden, um die Größe jeder Datei beim Auflisten zu erhalten.
Um das zuletzt geänderte Datum für jede Datei zu erhalten, können Sie die Funktion filemtime()
verwenden. Diese Funktion gibt die letzte Änderungszeit der Datei als UNIX -Zeitstempel zurück. Sie können dies in Verbindung mit der Funktion scandir()
verwenden, um das zuletzt geänderte Datum jeder Datei beim Auflisten zu erhalten.
Um Dateien nach Erweiterung zu filtern, können Sie die Funktion pathinfo()
verwenden. Diese Funktion gibt Informationen zum Dateipfad einschließlich der Erweiterung zurück. Sie können dies in Verbindung mit der Funktion scandir()
verwenden, um Dateien nach der Auflistung nach Erweiterung zu filtern.
Um Dateien und Verzeichnisse in Remote -Verzeichnissen aufzulisten, können Sie die Funktion ftp_nlist()
verwenden. Diese Funktion gibt eine Liste von Dateien und Verzeichnissen im angegebenen Verzeichnis auf dem FTP -Server zurück. Bevor Sie ftp_nlist()
verwenden, müssen Sie eine FTP -Verbindung unter Verwendung der Funktionen ftp_connect()
und ftp_login()
herstellen.
Um Fehler bei der Auflistung von Dateien und Verzeichnissen zu behandeln, können Sie die Funktionen error_reporting()
und set_error_handler()
verwenden. Mit diesen Funktionen können Sie die Fehlerberichterstattungsstufe festlegen und eine benutzerdefinierte Fehlerbehandlungsfunktion definieren, die aufgerufen wird, wenn ein Fehler auftritt.
Um Dateien und Verzeichnisse in einem ZIP -Archiv aufzulisten, können Sie die ZipArchive
-Klasse verwenden. Diese Klasse bietet Methoden zum Umgang mit ZIP -Archiven, einschließlich der getFromName()
-Methode, mit der Sie den Inhalt von Dateien im Archiv abrufen können.
Das obige ist der detaillierte Inhalt vonPHP Master | Listen Sie Dateien und Verzeichnisse mit PHP auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!