"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment analyser plusieurs sous-dossiers à la recherche de fichiers en PHP ?

Comment analyser plusieurs sous-dossiers à la recherche de fichiers en PHP ?

Publié le 2024-11-09
Parcourir:998

How to Scan Multiple Subfolders for Files in PHP?

Analyse de plusieurs sous-dossiers en PHP avec glob

En PHP, la fonction glob peut être utilisée pour rechercher des fichiers dans un répertoire spécifié. Cependant, lors d'une recherche dans plusieurs sous-répertoires et sous-sous-répertoires, des considérations supplémentaires sont nécessaires.

Recherche récursive avec glob

Une approche consiste à utiliser les capacités récursives de glob. Voici une fonction qui effectue une recherche récursive pour le modèle de fichier spécifié :

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

Pour utiliser cette fonction, fournissez simplement le répertoire racine et le modèle de fichier comme arguments :

$result = rglob($_SERVER['DOCUMENT_ROOT'] . '/test.zip');
var_dump($result);

Approche alternative avec RecursiveDirectoryIterator

Une autre option consiste à utiliser la classe RecursiveDirectoryIterator. Voici une fonction qui exploite cette classe pour rechercher de manière récursive le modèle de fichier spécifié :

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

Pour appeler cette fonction :

$result = rsearch($_SERVER['DOCUMENT_ROOT'], '/.*\/test\.zip/'));
var_dump($result);

Tous deux glob et RecursiveDirectoryIterator fournissent des solutions viables pour la recherche récursive de fichiers dans plusieurs sous-répertoires. Le choix entre eux dépend des besoins spécifiques de votre application.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3