Wie kann ich den vollständigen Verzeichnisbaum mit SPL abrufen?
Frage
Wie kann ich den vollständigen Verzeichnisbaum mit SPL
abzurufen, möglicherweise RecursiveDirectoryIterator
und RecursiveIteratorIterator
mit?
Lösung
Standardmäßig wird die RecursiveIteratorIterator
LEAVES_ONLY
für das zweite Argument verwenden, um __construct
. Das bedeutet, es Dateien nur zurückkehren wird. Wenn Sie Include-Dateien möchten und Verzeichnisse (zumindest das ist, was ich als würde ein voll Verzeichnisbaum), dann würden Sie tun müssen:
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::SELF_FIRST
);
und dann kann man darüber foreach
. Wenn Sie den Verzeichnisbaum statt dessen Ausgabe zurückkehren möchten, können Sie es in einem Array speichern, z.
foreach ($iterator as $fileObject) {
$files[] = $fileObject;
// or if you only want the filenames
$files[] = $fileObject->getPathname();
}
Sie können auch die Anordnung von $fileObjects
ohne foreach
erstellen, indem Sie:
$files[] = iterator_to_array($iterator);
Wenn Sie nur Verzeichnisse zurückgegeben, foreach
über die $iterator
wie folgt aus:
foreach ($iterator as $fileObject) {
if ($fileObject->isDir()) {
$files[] = $fileObject;
}
}
Andere Tipps
Sie können nur wollen, oder alles, was Sie wollen
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}