Maison  >  Article  >  développement back-end  >  Comment effectuer une analyse récursive de dossiers pour des fichiers spécifiques en PHP ?

Comment effectuer une analyse récursive de dossiers pour des fichiers spécifiques en PHP ?

DDD
DDDoriginal
2024-11-11 09:19:02966parcourir

How to Perform Recursive Folder Scanning for Specific Files in 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!

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