Maison >développement back-end >tutoriel php >Comment effectuer une analyse récursive de dossiers pour des fichiers spécifiques en PHP ?
Glob : Analyse récursive de dossiers pour des fichiers spécifiques
Vous disposez d'un serveur avec plusieurs dossiers et fichiers et vous cherchez à créer un fonctionnalité de recherche qui fournit un lien de téléchargement pour un fichier spécifié. Le script actuel recherche efficacement le fichier dans le dossier racine, mais vous en avez également besoin pour analyser plus en profondeur les sous-dossiers.
Recherche récursive avec glob
Une approche pour réaliser une recherche récursive consiste à utiliser la fonction glob() avec une fonction de recherche récursive personnalisée, 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; }
Exemple d'utilisation :
$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
Une autre option consiste à utiliser 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; }
Exemple d'utilisation :
$result = rsearch($_SERVER['DOCUMENT_ROOT'], '/.*\/test\.zip/')); // To find "test.zip" recursively
RecursiveDirectoryIterator et glob peut accomplir la tâche de recherche récursive, et le choix entre eux dépend de votre version et de vos préférences PHP.
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!