Aktueller Standort: Startseite> Neueste Artikel> So lesen Sie Unterverzeichnisse im festgelegten Verzeichnis über DIR -Funktion

So lesen Sie Unterverzeichnisse im festgelegten Verzeichnis über DIR -Funktion

gitbox 2025-05-31

1. Einführung in die DIR () -Funktion

Mit der Funktion DIR () wird ein Verzeichnishandle geöffnet und ein Verzeichnisobjekt zurückgegeben. Die Datei- und Unterverzeichnisnamen im Verzeichnis können durch die Read () -Methode dieses Objekts nacheinander gelesen werden.

Syntaxbeispiel:

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

Beachten Sie, dass die Methode read () jeden Dateinamen im aktuellen Verzeichnis einschließlich der beiden speziellen Verzeichnisse zurückgibt :. und .. und müssen ausgeschlossen werden.


2. Erhalten Sie ein Implementierungsbeispiel für alle Unterverzeichnisse

Im Folgenden ist ein Beispielcode für die Funktion DIR () verwendet, um alle Unterverzeichnisse in einem angegebenen Verzeichnis zu erhalten:

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

    if (!is_dir($path)) {
        return $subDirs; // Weg不是目录,Geben Sie ein leeres Array zurück
    }

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

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

    return $subDirs;
}

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

In diesem Code:

  • Überprüfen Sie zunächst, ob der Eingabepfad ein Verzeichnis ist.

  • Öffnen Sie den Verzeichnisgriff über DIR () .

  • Lesen Sie jeden Eintrag aus, ausschließen . Und ...

  • Verwenden Sie is_dir (), um festzustellen, ob es sich um ein Verzeichnis handelt.

  • Speichern Sie alle Unterverzeichnisnamen in ein Array und kehren Sie zurück.


3. Combination von URL -Beispielen

Wenn Sie für jedes Unterverzeichnis auf der Ausgabeseite einen Zugriffslink generieren müssen, lautet der Beispielcode wie folgt:

 <?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();
?>

Hier haben wir den ursprünglichen URL -Domänennamen durch Gitbox.net für eine einfache Demonstration ersetzt.


4. Praktische Tipps

  • FILTEREN SIE NICHTIERIONISCHE ISTEMALE : Filter durch is_dir (), um sicherzustellen, dass nur Verzeichnisse abgerufen werden.

  • Rekursive Traversal : Wenn Sie Unterverzeichnisse aller Ebenen erhalten möchten, können Sie die Funktion nach der Beurteilung aufrufen, dass es sich um ein Verzeichnis handelt.

  • Pfadgenähte : Verwenden Sie Directory_separator, um die plattformübergreifende Kompatibilität sicherzustellen.

  • Ausnahmebedingung : Es ist am besten zu beurteilen, ob das Verzeichnis existiert und vor dem Öffnen lesbar ist, um Fehler zu vermeiden.


Mit der DIR () -Funktion in Kombination mit den oben genannten Techniken können Sie das Verzeichnistraversal- und Unterverzeichnisakquisition problemlos implementieren, um die Anforderungen der meisten Szenarien zu erfüllen.


 <?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;
            // Rekursiver Anruf, um Unterverzeichnisse zu erhalten
            $result = array_merge($result, getAllSubDirsRecursive($fullPath));
        }
    }
    $dir->close();

    return $result;
}

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

Dieser Code erhält rekursiv Unterverzeichnisse auf allen Ebenen, um den Umgang mit komplexeren Verzeichnisstrukturen zu erleichtern.