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

DDD
Libérer: 2024-11-11 09:19:02
original
964 Les gens l'ont consulté

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

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

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

Exemple d'utilisation :

$result = rsearch($_SERVER['DOCUMENT_ROOT'], '/.*\/test\.zip/')); // To find "test.zip" recursively
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal