Scannen mehrerer Unterordner in PHP mit glob
In PHP kann die Glob-Funktion verwendet werden, um nach Dateien in einem bestimmten Verzeichnis zu suchen. Bei der Suche über mehrere Unterverzeichnisse und Unterverzeichnisse hinweg sind jedoch zusätzliche Überlegungen erforderlich.
Rekursive Suche mit glob
Ein Ansatz besteht darin, die rekursiven Fähigkeiten von glob zu nutzen. Hier ist eine Funktion, die eine rekursive Suche nach dem angegebenen Dateimuster durchführt:
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; }
Um diese Funktion zu verwenden, geben Sie einfach das Stammverzeichnis und das Dateimuster als Argumente an:
$result = rglob($_SERVER['DOCUMENT_ROOT'] . '/test.zip'); var_dump($result);
Alternativer Ansatz mit RecursiveDirectoryIterator
Eine weitere Option ist die Verwendung der RecursiveDirectoryIterator-Klasse. Hier ist eine Funktion, die diese Klasse nutzt, um rekursiv nach dem angegebenen Dateimuster zu suchen:
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; }
So rufen Sie diese Funktion auf:
$result = rsearch($_SERVER['DOCUMENT_ROOT'], '/.*\/test\.zip/')); var_dump($result);
Sowohl glob als auch RecursiveDirectoryIterator bieten praktikable Lösungen für die rekursive Suche nach Dateien in mehreren Unterverzeichnissen. Die Wahl zwischen ihnen hängt von den spezifischen Anforderungen Ihrer Anwendung ab.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3