Come posso recuperare l'intero albero di directory utilizzando SPL?
Domanda
Come posso recuperare l'intero albero di directory utilizzando SPL
, possibilmente con l'uso di RecursiveDirectoryIterator
e RecursiveIteratorIterator
?
Soluzione
Per impostazione predefinita, il RecursiveIteratorIterator
utilizzare LEAVES_ONLY
per il secondo argomento __construct
.Questo significa che verrà restituito solo file.Se si desidera includere i file e directory (almeno questo è quello che mi piacerebbe prendere in considerazione un completa albero di directory), devi fare:
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::SELF_FIRST
);
e poi si può foreach
su di essa.Se si desidera restituire l'albero delle directory, invece di emettere un output, è possibile memorizzare in un array, ad esempio
foreach ($iterator as $fileObject) {
$files[] = $fileObject;
// or if you only want the filenames
$files[] = $fileObject->getPathname();
}
È anche possibile creare la matrice di $fileObjects
senza foreach
da fare:
$files[] = iterator_to_array($iterator);
Se solo si desidera directory restituito, foreach
oltre il $iterator
come questa:
foreach ($iterator as $fileObject) {
if ($fileObject->isDir()) {
$files[] = $fileObject;
}
}
Altri suggerimenti
Si può solo, o fare tutto ciò che si desidera
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}