0

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

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)? ✖</p>

readdir.php: is_dir(readdir.php)? ✖</p>


但是将 is_dir(..) 放在循环条件中

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

..什么都不返回!

我知道 is_dir(..) 总是返回一个布尔值。那我的表达有什么问题吗?仅出于完整性考虑:Windows 7 SP1 上的 FastCGI 在 IIS 7.5 上的 PHP 5.4.14。

谢谢

4

2 回答 2

3

之所以如此,是因为您在 list 中的第一个目录将是"..",然后is_dir()返回 true 并且您的循环结束。请记住 -while循环将继续,直到条件为真,如果不是,循环将结束。

为了让事情正常工作 - 这样做:

$rgFiles = array_filter(glob('/path/to/files'), 'is_file');
于 2013-08-21T12:27:32.833 回答
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!!!

于 2013-08-22T08:37:11.460 回答