2011-08-22 86 views
5

我想用PHP的RecursiveDirectoryIterator列出一组目录。我遇到的问题是,它似乎在跳过它命中的任何空目录。任何想法如何使其列出空目录?RecursiveDirectoryIterator()不显示空目录

这里是我使用的代码的片段:

$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)); 
    } 
} 

回答

10

尝试:

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

感谢这个! :)你能解释为什么'〜RecursiveIteratorIterator :: LEAVES_ONLY'将​​不起作用吗?不工作意味着它只会列出第一级文件夹。 – hek2mgl

0

你开到使用另一种方法?如果是这样,我会推荐opendir()函数。该功能将为您提供特定父目录的所有子项。然后,您可以再往前走一步,如果它们是目录,也可以遍历其中一个子目录,并在需要时重复该过程。

opendir()的文档提供了一个例子,以帮助您与您的任务:

<?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); 
    } 
} 
?>