2011-08-22 5 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'がうまくいかない理由を説明できますか? Not workは、第1レベルのフォルダのみを一覧表示することを意味します。 – 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); 
    } 
} 
?>