Wie kann ich the full directory tree
mit SPL
abrufen?PHP SPL RecursiveDirectoryIterator RecursiveIteratorIterator ruft den vollständigen Baum ab
Antwort
standardmäßig möchten, die RecursiveIteratorIterator
LEAVES_ONLY
für das zweite Argument zu __construct
verwenden. Dies bedeutet, dass nur Dateien zurückgegeben werden. Wenn Sie Dateien und Verzeichnisse enthalten sein sollen (zumindest das ist, was ich ein voll Verzeichnisbaum betrachten würde), dann würden Sie tun müssen:
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::SELF_FIRST
);
und dann können Sie foreach
darüber. Wenn Sie die Verzeichnisstruktur zurückgeben möchten, anstatt sie auszugeben, können Sie sie 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
, indem Sie erstellen:
$files[] = iterator_to_array($iterator);
Wenn Sie nur zurück Verzeichnisse wollen, foreach
über die $iterator
wie folgt aus:
foreach ($iterator as $fileObject) {
if ($fileObject->isDir()) {
$files[] = $fileObject;
}
}
Sie können einfach oder everythng tun, die Sie
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}
Hallo, Was ich nicht verstehe ist, wie - aus dem PHP Dokument von [RecursiveIteratorIterator] (http://php.net/manual/fr/class.recursiviteratoriterator .php) - nehmen Sie an, dass '$ file' vom Typ SplFileInfo ist? – martin
Vielen Dank @Gordon, sehr detailliert;) – kmunky