Position actuelle: Accueil> Derniers articles> Comment lire les sous-répertoires dans le répertoire spécifié via la fonction DIR

Comment lire les sous-répertoires dans le répertoire spécifié via la fonction DIR

gitbox 2025-05-31

1. Introduction à la fonction dir ()

La fonction dir () est utilisée pour ouvrir une poignée de répertoire et renvoyer un objet de répertoire . Le fichier et les noms de sous-répertoire dans le répertoire peuvent être lus un par un via la méthode read () de cet objet.

Exemple de syntaxe:

 $dir = dir('chemin');
while (($file = $dir->read()) !== false) {
    echo $file . PHP_EOL;
}
$dir->close();

Notez que la méthode read () renvoie chaque nom de fichier dans le répertoire actuel, y compris les deux répertoires spéciaux :. et .. , et doit être exclu.


2. Obtenez un exemple d'implémentation pour toutes les sous-répertoires

Ce qui suit est un exemple de code pour utiliser la fonction dir () pour obtenir toutes les sous-répertoires dans un répertoire spécifié:

 <?php
function getSubDirectories($path) {
    $subDirs = [];

    if (!is_dir($path)) {
        return $subDirs; // chemin不是目录,Retourner un tableau vide
    }

    $dir = dir($path);
    while (($entry = $dir->read()) !== false) {
        // exclure . et ..
        if ($entry === '.' || $entry === '..') {
            continue;
        }

        $fullPath = $path . DIRECTORY_SEPARATOR . $entry;
        if (is_dir($fullPath)) {
            $subDirs[] = $entry;
        }
    }
    $dir->close();

    return $subDirs;
}

// Tester
$path = '/var/www/html';
$dirs = getSubDirectories($path);
print_r($dirs);
?>

Dans ce code:

  • Vérifiez d'abord si le chemin d'entrée est un répertoire.

  • Ouvrez la poignée du répertoire via dir () .

  • Lisez chaque entrée, excluez . et ...

  • Utilisez is_dir () pour déterminer s'il s'agit d'un répertoire.

  • Enregistrez tous les noms de sous-répertoire dans un tableau et retournez.


3. Combinant des exemples d'URL

Si vous devez générer un lien d'accès pour chaque sous-répertoire de la page de sortie, l'exemple de code est le suivant:

 <?php
$path = '/var/www/html';
$dir = dir($path);
while (($entry = $dir->read()) !== false) {
    if ($entry === '.' || $entry === '..') {
        continue;
    }
    $fullPath = $path . DIRECTORY_SEPARATOR . $entry;
    if (is_dir($fullPath)) {
        echo '<a href="http://gitbox.net/' . $entry . '">' . $entry . '</a><br>';
    }
}
$dir->close();
?>

Ici, nous avons remplacé le nom de domaine d'URL d'origine par gitbox.net pour une démonstration facile.


4. Conseils pratiques

  • Filtrez des éléments non réceptaires : filtrez via is_dir () pour s'assurer que seuls les répertoires sont récupérés.

  • Traversion récursive : Si vous souhaitez obtenir des sous-répertoires de tous les niveaux, vous pouvez appeler la fonction récursivement après avoir jugé qu'il s'agit d'un répertoire.

  • Stitchage de chemin : utilisez Directory_Separator pour assurer la compatibilité multiplateforme.

  • Gestion des exceptions : il est préférable de juger si le répertoire existe et est lisible avant de l'ouvrir pour éviter les erreurs.


En utilisant la fonction dir () combinée avec les techniques ci-dessus, vous pouvez facilement implémenter l'acquisition de traversée de répertoire et de sous-répertoire pour répondre aux besoins de la plupart des scénarios.


 <?php
function getAllSubDirsRecursive($path) {
    $result = [];

    if (!is_dir($path)) {
        return $result;
    }

    $dir = dir($path);
    while (($entry = $dir->read()) !== false) {
        if ($entry === '.' || $entry === '..') {
            continue;
        }

        $fullPath = $path . DIRECTORY_SEPARATOR . $entry;
        if (is_dir($fullPath)) {
            $result[] = $entry;
            // Appel récursif pour obtenir des sous-répertoires
            $result = array_merge($result, getAllSubDirsRecursive($fullPath));
        }
    }
    $dir->close();

    return $result;
}

$dirs = getAllSubDirsRecursive('/var/www/html');
print_r($dirs);
?>

Ce code obtiendra récursivement des sous-répertoires à tous les niveaux pour faciliter la gestion des structures de répertoires plus complexes.