Maison >développement back-end >tutoriel php >Comment rechercher de manière récursive des fichiers dans des sous-dossiers avec PHP : Glob vs RecursiveDirectoryIterator ?

Comment rechercher de manière récursive des fichiers dans des sous-dossiers avec PHP : Glob vs RecursiveDirectoryIterator ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-08 21:44:02880parcourir

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

PHP Glob : recherche récursive de fichiers dans des sous-dossiers

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 avec récursion

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;
}

RecursiveDirectoryIterator

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;
}

Comparaison et utilisation

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn