PHP:is_dir()在循环条件下不起作用

时间:2013-08-21 12:22:47

标签: php file-io

我只想索引当前目录中的所有文件:

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(..)总是返回一个布尔值。那我的表情有什么问题? 为了完整性:在Windows 7 SP1上由FastCGI在IIS 7.5上运行PHP 5.4.14。

谢谢

2 个答案:

答案 0 :(得分:3)

之所以如此,是因为您的第一个目录列表为"..",然后is_dir()返回true,您的周期结束。请记住 - while循环将持续到条件为真,如果不是,循环将结束。

让事情发挥作用 - 做到这一点:

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

答案 1 :(得分:0)

在我意识到 array_filter([array],[callback])正在做什么后,我找到了一个更好的解决方案来满足“当前目录中的所有文件”要求更密切:

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

尽管如此:感谢@Alma !!!

相关问题