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

Linda Hamilton
Libérer: 2024-11-08 21:44:02
original
828 Les gens l'ont consulté

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;
}
Copier après la connexion

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!