Maison > développement back-end > tutoriel php > Comment puis-je répertorier de manière récursive tous les fichiers et dossiers d'un répertoire à l'aide de PHP, en évitant les boucles infinies et les entrées en double ?

Comment puis-je répertorier de manière récursive tous les fichiers et dossiers d'un répertoire à l'aide de PHP, en évitant les boucles infinies et les entrées en double ?

Linda Hamilton
Libérer: 2024-12-02 10:05:15
original
931 Les gens l'ont consulté

How Can I Recursively List All Files and Folders in a Directory Using PHP, Avoiding Infinite Loops and Duplicate Entries?

Détermination des fichiers et des dossiers dans un répertoire à l'aide de fonctions PHP récursives

Cette discussion étudie une méthode permettant de parcourir les fichiers et sous-répertoires d'un répertoire de manière récursive.

Le fourni code :

function getDirContents($dir){
    $results = array();
    $files = scandir($dir);
    foreach($files as $key => $value){
        if(!is_dir($dir. DIRECTORY_SEPARATOR .$value)){
            $results[] = $value;
        } else if(is_dir($dir. DIRECTORY_SEPARATOR .$value)) {
            $results[] = $value;
            getDirContents($dir. DIRECTORY_SEPARATOR .$value);
        }
    }
}
print_r(getDirContents('/xampp/htdocs/WORK'));
Copier après la connexion

Le dilemme :
Le code donné possède une fonction récursive pour explorer les répertoires et les fichiers. Cependant, il ne parvient pas à ignorer « ». et '..', ce qui entraîne une boucle potentiellement sans fin. De plus, chaque fichier et répertoire est dupliqué dans les résultats.

La réponse :
Pour résoudre ce problème, nous pouvons modifier la fonction comme suit :

function getDirContents($dir, &$results = array()) {
    $files = scandir($dir);
    foreach ($files as $key => $value) {
        $path = realpath($dir . DIRECTORY_SEPARATOR . $value);
        if (!is_dir($path)) {
            $results[] = $path;
        } else if ($value != "." && $value != "..") {
            getDirContents($path, $results);
            $results[] = $path;
        }
    }
    return $results;
}
Copier après la connexion

Ce code :

  • Appelle la fonction realpath() pour récupérer le chemin réel de chaque fichier et répertoire, éliminant ainsi toute traversée potentielle problèmes.
  • Ignore les répertoires désignés par '.' ou '..', ce qui pourrait conduire à des boucles infinies.
  • Évite les entrées en double dans les résultats en les stockant dans un tableau passé par référence ($results).

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