PHP readdir не читает некоторые файлы - PullRequest
2 голосов
/ 10 октября 2008

Я использую следующий код для циклического перемещения по каталогу для распечатки имен файлов. Однако не все файлы отображаются. Я пытался использовать 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.

Что на земле может происходить?

Я использую Arch Linux (ядро 2.6.26-ARCH) с PHP версии 5.2.6 и Apache / 2.2.9 с Suhosin-Patch. Моя файловая система ext3, и я использую FAM 2.6.10.

Ответы [ 3 ]

3 голосов
/ 10 октября 2008

Продолжить также не будет работать, потому что вы пропустите строку, которая читает следующий файл.

Вы можете избавиться от первого $file = readdir( $dh );, а затем сделать

while (false !== ($file = readdir($dh))) {
    if (in_array($file, $ignore, TRUE)) { continue; }
    $str .= $file."\n";
}
1 голос
/ 10 октября 2008
if (in_array($file, $ignore, TRUE)) { break; }

Конечно, это должно быть continue не break?

1 голос
/ 10 октября 2008

Ваши break ключевые слова портят ваш код:
Скорее всего, ваш цикл первым встречает «.» каталог, а затем вырывается из цикла while.

попробуйте заменить его на continue, и все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...