2011-08-22 19 views
5

Estoy tratando de utilizar el RecursiveDirectoryIterator de PHP para listar un conjunto de directorios. El problema que estoy teniendo es que parece omitir cualquier directorio vacío que golpea. ¿Alguna idea de cómo hacer que enumere los directorios vacíos?RecursiveDirectoryIterator() no muestra los directorios vacíos

Aquí es un clip del código que estoy utilizando:

$iterator = new RecursiveIteratorIterator(
         new RecursiveDirectoryIterator($root)); 
$result = array(); 

$prefix_length = strlen($root) + 1; 
foreach($iterator as $file) 
{  
    if($file->isDir()) 
    { 

     $result[] = dirname(substr($file->__toString(), $prefix_length)); 
    } 
} 

Respuesta

10

Proveedores:

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($root), RecursiveIteratorIterator::SELF_FIRST 
); 
+0

Gracias por esto! :) ¿Puedes explicar por qué '~ RecursiveIteratorIterator :: LEAVES_ONLY' no funcionará? No trabajar significa que solo mostrará carpetas en el primer nivel. – hek2mgl

0

¿Estás abierto a la utilización de otro método? Si es así, recomendaría la función opendir(). Esta función le proporcionará todos los elementos secundarios de un directorio primario específico. Luego, puede ir un paso más allá y pasar a uno de los niños si también son un directorio, repitiendo el proceso cuando sea necesario.

La documentación sobre opendir() proporciona un ejemplo para ayudarle con su tarea:

<?php 
$dir = "/etc/php5/"; 

// Open a known directory, and proceed to read its contents 
if (is_dir($dir)) { 
    if ($dh = opendir($dir)) { 
     while (($file = readdir($dh)) !== false) { 
      echo "filename: $file : filetype: " . filetype($dir . $file) . "\n"; 
     } 
     closedir($dh); 
    } 
} 
?> 
Cuestiones relacionadas