PHP readdir没有读取一些文件

时间:2008-10-10 14:14:07

标签: php

我正在使用以下代码遍历目录以打印出文件的名称。但是,并非所有文件都显示。我尝试过使用 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。

3 个答案:

答案 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