我只想索引当前目录中的所有文件:
if ($handle = opendir('.')) {
while (($file = readdir($handle)) !== FALSE) {
if (is_dir($file)) continue;
echo "<p><strong>$file</strong>: is_dir($file)? "
.(is_dir($file)?"✔":"✖")."</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。
谢谢
答案 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)?"✔":"✖")."</p>\n";
}
尽管如此:感谢@Alma !!!