Lors de l'analyse de fichiers sur un serveur, il est souvent nécessaire d'étendre la recherche au-delà du dossier racine pour inclure les sous-dossiers et sous-sous-dossiers. Voici comment y parvenir en utilisant la fonction glob de PHP et RecursiveDirectoryIterator.
Glob fournit une forme limitée de recherche récursive avec la fonction glob(). Cependant, il ne prend pas en charge certaines options comme GLOB_BRACE. Pour surmonter ce problème, vous pouvez utiliser une fonction personnalisée rglob() qui parcourt de manière récursive la structure des répertoires et renvoie un tableau fusionné de fichiers correspondants :
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; }
Une autre option pour la recherche récursive est la classe RecursiveDirectoryIterator. Il offre une approche plus robuste et extensible :
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; }
rglob() et rsearch() peuvent effectuer des recherches de fichiers récursives. RecursiveDirectoryIterator offre une flexibilité supplémentaire grâce à ses options d'extensibilité. Le choix entre les deux dépend de vos besoins spécifiques et du niveau de contrôle souhaité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!