我正在使用以下代码遍历目录以打印出文件的名称。但是,并非所有文件都显示。我尝试过使用 clearstatcache 但没效果。
$str = '';
$ignore = array('.', '..');
$dh = @opendir( $path );
if ($dh === FALSE)
{
// error
}
$file = readdir( $dh );
while( $file !== FALSE )
{
if (in_array($file, $ignore, TRUE)) { break; }
$str .= $file."\n";
$file = readdir( $dh );
}
以下是目录中的内容:
root.auth test1.auth test2.auth test3.auth test5.auth
但是,test5.auth没有出现。如果我将它重命名为test4.auth它不会出现。如果我将其重命名为test6.auth,则会出现。这是可靠的行为 - 我可以多次重命名它,除非我将它重命名为test6.auth,否则它仍然不会显示。
究竟会发生什么?
我正在使用PHP Version 5.2.6运行Arch Linux(内核2.6.26-ARCH)和使用Suhosin-Patch运行Apache / 2.2.9。我的文件系统是ext3,我正在运行fam 2.6.10。
答案 0 :(得分:3)
继续也无效,因为您将跳过读取下一个文件的行。
你可以摆脱第一个$file = readdir( $dh );
然后再做
while (false !== ($file = readdir($dh))) {
if (in_array($file, $ignore, TRUE)) { continue; }
$str .= $file."\n";
}
答案 1 :(得分:1)
您的break
个关键字会弄乱您的代码:
你的循环很可能首先遇到'。'目录,而不是你的while循环。
尝试用continue
替换它,你应该没问题。
答案 2 :(得分:1)
if (in_array($file, $ignore, TRUE)) { break; }
当然应该是continue
而不是break
?