Heim > Backend-Entwicklung > PHP-Tutorial > PHP Master | Listen Sie Dateien und Verzeichnisse mit PHP auf

PHP Master | Listen Sie Dateien und Verzeichnisse mit PHP auf

Joseph Gordon-Levitt
Freigeben: 2025-02-25 18:23:17
Original
198 Leute haben es durchsucht

PHP Master | List Files and Directories with PHP

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Schlüsselpunkte

  • PHP bietet mehrere Funktionen für die Listen von Dateien und Verzeichnissen, einschließlich glob(), opendir(), readdir(), closedir(), scandir() und
  • . Die Flexibilität dieser Funktionen variiert und einige erfordern nach der Filmfilterung.
  • FilesystemIterator Standard-PHP-Bibliothek (SPL) bietet objektorientierte Lösungen für Listendateien und Verzeichnisse, einschließlich RecursiveDirectoryIterator, GlobIterator und
  • . Diese Iteratoren können erweitert werden, um den bestimmten Bedürfnissen besser zu erfüllen.
  • glob() opendir() Funktionen sind eine Einzeilungslösung, die die Filterung ermöglicht, aber keine Flexibilität hat. Stattdessen bieten readdir(), closedir() und
  • mehr Flexibilität, erfordern jedoch mehr ausführliche Code und Nachfilterung.
  • 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
  • verwenden können, um dieselbe Funktionalität zu erreichen.

Grundlösung

glob() Der erste Satz von Methoden zeigt die Verwendung von opendir() -Funktionen, die Kombination von Funktionen readdir(), closedir() und scandir() und die Verwendung von

-Funktionen.

glob() Verwendung

glob() Die erste zu diskutierende Funktion ist

, mit der wir nach Pfadnamen suchen können, die Wildkarten ähnlich der berühmtesten Hülle haben. Diese Funktion hat zwei Parameter:
  • $pattern
  • (erforderlich): Suchmodus
  • $flags
  • (optional): Ein oder mehrere Flags, die in der offiziellen Dokumentation
aufgeführt sind

*.txt Lassen Sie uns einige Beispiele sehen! Um nach allen Dateien und Verzeichnissen zu suchen, die mit

in einem Verzeichnis enden, können Sie schreiben:
<?php $filelist = glob("*.txt");
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

$filelist Wenn Sie

zeigen, ist die Ausgabe:
<code>array (
  0 => 'article.txt',
  1 => 'text.txt'
)</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie eine Liste von Dateien und Verzeichnissen mit "TE" wünschen, ist der Code, den Sie schreiben möchten,:
<?php $filelist = glob("te*");
Nach dem Login kopieren
Nach dem Login kopieren

Die Ausgabe ist:
<code>array (
  0 => 'test.dat',
  1 => 'text.txt'
)</code>
Nach dem Login kopieren

Um nur die Liste der Verzeichnisse mit "MA" zu erhalten, lautet der Code wie folgt:
<?php $filelist = glob("*ma*", GLOB_ONLYDIR);
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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.

verwenden 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");
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wie Sie vielleicht erraten haben, erzeugt die Verwendung des obigen Code die folgende Ausgabe:

<?php $filelist = glob("te*");
Nach dem Login kopieren
Nach dem Login kopieren

Verwendung 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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Verwenden wir den SPS -Iterator

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
  • aufgeführt sind

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");
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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");
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Schlussfolgerung

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.
  • Die Lösungen mit 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.
  • Wenn Sie die OOP -Methode verwenden möchten, sollten Sie die SPL -Bibliothek verwenden. Darüber hinaus können Sie Kurse auf Ihren Bedürfnissen verlängern.
  • Während 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

FAQs (FAQ) zum Auflisten von Dateien und Verzeichnissen mithilfe von PHP

Wie sortiere ich Dateien und Verzeichnisse in PHP?

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.

Wie schließen Sie bestimmte Dateien oder Verzeichnisse aus, wenn Sie Dateien und Verzeichnisse in PHP auflisten?

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.

Wie listet ich Verzeichnisse nur in PHP und nicht in Dateien auf?

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.

Wie kann ich Dateien und Verzeichnisse in PHP rekursiv auflisten?

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.

Wie erhalte ich die Größe jeder Datei in PHP, wenn ich eine Datei auflistest?

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.

Wie erhalte ich das zuletzt geänderte Datum jeder Datei in PHP beim Auflisten einer Datei?

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.

Wie filtere ich Dateien nach Erweiterung beim Auflisten von Dateien in PHP?

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.

Wie listet ich Dateien und Verzeichnisse in Remote -Verzeichnissen in PHP auf?

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.

Wie kann ich mit Fehlern umgehen, wenn sie Dateien und Verzeichnisse in PHP auflisten?

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.

Wie listet ich Dateien und Verzeichnisse in ZIP -Archiven in PHP auf?

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage