Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man mit PHP rekursiv nach Dateien in Unterordnern suchen: Glob vs. RecursiveDirectoryIterator?

Wie kann man mit PHP rekursiv nach Dateien in Unterordnern suchen: Glob vs. RecursiveDirectoryIterator?

Linda Hamilton
Linda HamiltonOriginal
2024-11-08 21:44:02858Durchsuche

How to Recursively Search for Files in Subfolders with PHP: Glob vs. RecursiveDirectoryIterator?

PHP Glob: Rekursive Suche nach Dateien in Unterordnern

Beim Durchsuchen eines Servers nach Dateien besteht häufig die Notwendigkeit, die Suche über den Stammordner hinaus auf Unterordner auszudehnen Unterunterordner. So erreichen Sie dies mit der glob-Funktion von PHP und RecursiveDirectoryIterator.

Glob mit Rekursion

Glob bietet eine eingeschränkte Form der rekursiven Suche mit der glob()-Funktion. Es fehlt jedoch die Unterstützung für bestimmte Optionen wie GLOB_BRACE. Um dies zu umgehen, können Sie eine benutzerdefinierte Funktion rglob() verwenden, die die Verzeichnisstruktur rekursiv durchläuft und ein zusammengeführtes Array übereinstimmender Dateien zurückgibt:

function rglob($pattern, $flags = 0) {
    $files = glob($pattern, $flags); 
    foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
        $files = array_merge(
            [],
            ...[$files, rglob($dir . "/" . basename($pattern), $flags)]
        );
    }
    return $files;
}

RecursiveDirectoryIterator

Eine weitere Option für die rekursive Suche ist die RecursiveDirectoryIterator-Klasse. Es bietet einen robusteren und erweiterbareren Ansatz:

function rsearch($folder, $regPattern) {
    $dir = new RecursiveDirectoryIterator($folder);
    $ite = new RecursiveIteratorIterator($dir);
    $files = new RegexIterator($ite, $regPattern, RegexIterator::GET_MATCH);
    $fileList = array();
    foreach($files as $file) {
        $fileList = array_merge($fileList, $file);
    }
    return $fileList;
}

Vergleich und Verwendung

Sowohl rglob() als auch rsearch() können rekursive Dateisuchen durchführen. RecursiveDirectoryIterator bietet durch seine Erweiterbarkeitsoptionen zusätzliche Flexibilität. Die Wahl zwischen beiden hängt von Ihren spezifischen Anforderungen und dem gewünschten Maß an Kontrolle ab.

Das obige ist der detaillierte Inhalt vonWie kann man mit PHP rekursiv nach Dateien in Unterordnern suchen: Glob vs. RecursiveDirectoryIterator?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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