2013-08-21 29 views
0

我只想指數在當前目錄中的所有文件:PHP:is_dir()循環中條件不起作用

if ($handle = opendir('.')) { 
while (($file = readdir($handle)) !== FALSE) { 
     if (is_dir($file)) continue; 
     echo "<p><strong>$file</strong>: is_dir($file)? " 
      .(is_dir($file)?"&#10004;":"&#10006;")."</p>\n"; 
    }    
    closedir($handle); 
} 

..輸出:


的index.php:is_dir (的index.php)? ✖

readdir.php:is_dir(readdir.php)? ✖


但佈置is_dir(..)循環條件

while (($file = readdir($handle)) !== FALSE && !is_dir($file)) { 
    ... 
} 

..內返回什麼

我知道is_dir(..)總是返回一個布爾值。那麼我的表情有什麼問題? 只是爲了完整性:在IIS 7.5的FastCGI通過PHP 5.4.14在Windows 7 SP1。

感謝

+0

是的,我可能會使用[水珠( 「\ * \ *。」)(http://php.net/manual/en/function.glob.php);-) – Marcel

回答

0

後,我意識到什麼array_filter([數組],[回調])做我來到了一個更好的解決方案會議「中的所有文件在當前目錄」的要求更加緊密地:

foreach (array_filter(scandir('.'), "is_file") as $file) { 
    echo "<p><strong>$file</strong>: is_dir($file)? " 
     .(is_dir($file)?"&#10004;":"&#10006;")."</p>\n"; 
} 

不過:感謝@Alma!

3

之所以如此,是因爲在列表中第一個目錄將是"..",然後is_dir()返回true,你的週期結束。記住 - 和while循環將持續下去,直到條件爲真,如果它不是,週期將結束。

要得到的東西的工作 - 這樣做:

$rgFiles = array_filter(glob('/path/to/files'), 'is_file'); 
+0

呀。你是對的。對不起,我的愚蠢問題!卻不是因familar通過使用完整的語句PHP典型文件迭代。 – Marcel