2011-08-22 91 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); 
    } 
} 
?> 
相關問題