Heim > Artikel > Backend-Entwicklung > Wie führt man in PHP eine rekursive Ordnersuche nach bestimmten Dateien durch?
Glob: Rekursive Ordnersuche nach bestimmten Dateien
Sie haben einen Server mit mehreren Ordnern und Dateien und möchten einen erstellen Suchfunktion, die einen Download-Link für eine bestimmte Datei bereitstellt. Das aktuelle Skript sucht effektiv nach der Datei im Stammordner, aber Sie benötigen es auch, um tiefer in Unterordner zu scannen.
Rekursive Suche mit Glob
Ein Ansatz für Um eine rekursive Suche zu erreichen, verwenden Sie die Funktion glob() mit einer benutzerdefinierten rekursiven Suchfunktion. rglob:
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; }
Beispielverwendung:
$result = rglob($_SERVER['DOCUMENT_ROOT'] . '/test.zip'); // To find "test.zip" recursively $result = rglob($_SERVER['DOCUMENT_ROOT'] . '/*test.zip'); // To find all files ending with "test.zip"
Alternative: RecursiveDirectoryIterator
Eine weitere Option ist die Verwendung RecursiveDirectoryIterator:
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; }
Beispielverwendung:
$result = rsearch($_SERVER['DOCUMENT_ROOT'], '/.*\/test\.zip/')); // To find "test.zip" recursively
Sowohl RecursiveDirectoryIterator als auch Glob können die rekursive Suchaufgabe ausführen, und die Wahl zwischen ihnen hängt von Ihrer PHP-Version ab und Präferenz.
Das obige ist der detaillierte Inhalt vonWie führt man in PHP eine rekursive Ordnersuche nach bestimmten Dateien durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!