In PHP ist die Scandir -Funktion eine sehr häufige Funktion, die alle Dateien und Ordner in einem Verzeichnis auflistet. Standardmäßig werden versteckte Dateien (Dateien oder Ordner beginnend mit Punkten ) nicht aufgeführt. Dies kann uns in einigen Fällen Unannehmlichkeiten verursachen, z. B. wie machen wir dies, wenn wir alles in einem Verzeichnis auflisten müssen (einschließlich versteckter Dateien)? In diesem Artikel werden Sie Schritt für Schritt vorgenommen, um zu verstehen, wie Sie die SCANDIR -Funktion verwenden, um versteckte Dateien aufzulisten.
Die grundlegende Syntax der Scandir -Funktion lautet wie folgt:
<span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>, </span><span><span class="hljs-variable">$sorting_order</span></span><span>);
</span></span>
$ verzeichnis : Gibt den Verzeichnispfad an, für den die Datei aufgeführt werden muss.
$ sorting_order : Optional, Geben Sie die Sortiermethode an, die Standardeinstellung ist aufsteigender Reihenfolge.
Diese Funktion gibt ein Array zurück, das die Namen von Dateien und Ordnern im Verzeichnis enthält. Rückgabe falsch , wenn keine Zugriffsgenehmigung vorliegt oder das Verzeichnis nicht vorhanden ist.
Wenn wir den folgenden Code ausführen:
<span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-string">'/path/to/directory'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>);
</span></span>
Das Ergebnis kann eine Ausgabe sein, die dem folgenden ähnelt:
<span><span>Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => .
[</span><span><span class="hljs-meta">1</span></span><span>] => ..
[</span><span><span class="hljs-meta">2</span></span><span>] => file1.txt
[</span><span><span class="hljs-meta">3</span></span><span>] => folder1
[</span><span><span class="hljs-meta">4</span></span><span>] => file2.txt
)
</span></span>
Wie Sie sehen können, sind die versteckten Dateien im Verzeichnis (z. B. .Env -Dateien) nicht aufgeführt, sondern nur das aktuelle Verzeichnis . und das übergeordnete Verzeichnis .. sind aufgeführt.
Um die Scandir -Liste versteckte Dateien zu erstellen, können wir dies auf zwei Arten tun: Einer besteht darin, eine benutzerdefinierte Filtermethode zu verwenden, und das andere ist zu filtern, indem das von Scandir zurückgegebene Array kombiniert wird.
Wir können einen Filter anpassen und manuell prüfen, ob die Dateinamen, die von Scandir gestartet sind . , und entscheiden Sie dann, ob sie sie basierend auf den Bedürfnissen halten sollen.
<span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/directory'</span></span><span>;
</span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>);
</span><span><span class="hljs-comment">// verwenden array_filter Filtern Sie versteckte Dateien heraus</span></span><span>
</span><span><span class="hljs-variable">$allFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>, function(</span><span><span class="hljs-variable">$file</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>] === </span><span><span class="hljs-string">'.'</span></span><span> || </span><span><span class="hljs-variable">$file</span></span><span> !== </span><span><span class="hljs-string">'.'</span></span><span> && </span><span><span class="hljs-variable">$file</span></span><span> !== </span><span><span class="hljs-string">'..'</span></span><span>;
});
</span><span><span class="hljs-comment">// Alle Dateien und Ordner ausgeben(Enthält versteckte Dateien)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$allFiles</span></span><span>);
</span></span>
In diesem Beispiel haben wir Array_filter verwendet, um Dateien auszuführen, beginnend mit (d. H. Versteckten Dateien) und sicherstellen, dass die. und .. Verzeichnisse sind nicht enthalten.
Eine weitere übliche Praxis besteht darin, eine Glob -Funktion in Verbindung mit der Methode zu verwenden, mit der wir bestimmte Arten von Dateien, einschließlich versteckter Dateien, durch Musteranpassung auflisten können.
<span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/directory'</span></span><span>;
</span><span><span class="hljs-variable">$allFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_merge</span></span><span>(</span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>), </span><span><span class="hljs-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span> . </span><span><span class="hljs-string">'/.*'</span></span><span>));
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$allFiles</span></span><span>);
</span></span>
Auf diese Weise listet GLIpl alle versteckten Dateien auf, die dem Muster übereinstimmen ( d. H. Dateien, die mit.) Stimmen und mit den von Scandir zurückgegebenen Ergebnissen verschmelzen.
Wenn Sie mehr in den aufgelisteten versteckten Dateien durchführen möchten, z. B. das Ausschluss bestimmter Dateien oder die Sortierdateien, können Sie das von Scandir zurückgegebene Array verarbeiten.
Zum Beispiel alle versteckten Dateien ausschließen, beginnend mit .git :
<span><span><span class="hljs-variable">$directory</span></span><span> = </span><span><span class="hljs-string">'/path/to/directory'</span></span><span>;
</span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$directory</span></span><span>);
</span><span><span class="hljs-variable">$filteredFiles</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_filter</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>, function(</span><span><span class="hljs-variable">$file</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>] !== </span><span><span class="hljs-string">'.'</span></span><span> || </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-string">'.git'</span></span><span>) !== </span><span><span class="hljs-number">0</span></span><span>;
});
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$filteredFiles</span></span><span>);
</span></span>
Mit den beiden oben genannten Methoden können Sie die SCANDIR -Funktion flexibel verwenden, um versteckte Dateien aufzulisten. Unabhängig davon, ob Sie benutzerdefinierte Filtermethoden verwenden oder Glob -Funktionen kombinieren, können Sie alle Dateien und Ordner im Verzeichnis erfolgreich erhalten, einschließlich dieser versteckten Dateien in PHP. In der tatsächlichen Entwicklung können Sie eine geeignete Möglichkeit für die Behandlung von versteckten Dateien erhalten, die Ihnen eine bessere Kontrolle über das Lesen und Betrieb von Dateien erhalten.