PHP.de Wissenssammlung

Verzeichnis auslesen

Iteratoren sind der empfohlene Weg, das Dateisystem zu durchlaufen. Die folgenden Beispiele nutzten SPL-Klassen, die in PHP 5.3 hinzugefügt wurden.

Verzeichnis auslesen

$dir = __DIR__;

$iterator = new DirectoryIterator($dir);

foreach ($iterator as $file) {

    if (!$file->isFile()) {
        continue;
    }
    echo $file->getPathname() . "\n";
}

Alternativ könnte man hier für einfache Durchläufe auch glob() (Doku) verwenden.

Verzeichnis rekursiv auslesen

$dir = __DIR__;

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($dir)
);

foreach ($iterator as $file) {

    if (!$file->isFile()) {
        continue;
    }
    echo $file->getPathname() . "\n";
}

Verzeichnis rekursiv auslesen - mit Filter

Will man bsp. nur auf spezielle Dateiendung(en) “filtern”, könnte man den RegexIterator verwenden.

Beispiel wie oben, um den RegexIterator erweitert. Der Filter wird durch ein Regex-Pattern festgelegt.

$dir = __DIR__;

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($dir)
);
$php_files = new RegexIterator($iterator, '/\.php$/'); // Dateiendung ".php"

foreach ($php_files as $file) {

    if (!$file->isFile()) {
        continue;
    }
    echo $file->getPathname() . "\n";
}

Anmerkungen

Es gibt noch andere Wege zB readdir(), dir(), etc. die jedoch seit Einführung der Iteratoren mit PHP 5.3 für diesen Zweck keine Vorteile bringen.

Dieser Beitrag wird zur Zeit diskutiert und wurde zuletzt von hausl verändert.

Beiträge die zur Diskussion gestellt werden, enthalten mitunter Informationen bei denen wir uns noch bezüglich der finalen Darstellung absprechen müssen. Gedulde dich etwas, wir stellen diesen Beitrag fertig, sobald die Diskussion beendet ist.

An diesem Beitrag waren bisher beteiligt: nikosch, mermshaus, hausl