PHP ошибка readdir(): 2 is not a valid Directory resource

Если ваша программа не работает, значит, в ней есть ошибка. Проблема лишь в том, что собой представляет ошибка и где она находится. Сегодня я столкнулся с тем, что php-функция readdir()выдавала ошибку: 2 is not a valid Directory resource – и я никак не мог понять, в чём проблема. Надеюсь, моя заметка поможет вам сберечь время и силы.

Начнём с того, что в качестве параметра функции readdir()выступает дескриптор каталога (ресурс), который возвращает функция opendir(). Примечательно, что если дескриптор каталога не указан, используется последний дескриптор, открытый функцией opendir(). Но это так, к слову. Нам же важно соблюдать последовательность действий, например:

$dir = '.';
$dh = opendir($dir);
if ( $dh === false ) die($dir .' - ERROR');
while ( ( $file = readdir($dh) ) !== false ) {
  echo $file;
}
closedir($dh);

В данном случае переменная $dh содержит дескриптор каталога $dir. В том случае, если readdir()передать путь к открываемому каталогу $dirможет возникнуть упомянутая ранее ошибка. Впрочем, такого рода ошибка свойственна скорее новичкам, а у меня было другое.

В моём случае, я сделал преждевременное закрытие потока, поместив функцию closedir()в цикл while, например:

$dh = opendir($dir);
if ( $dh === false ) die($dir .' - ERROR');
while ( ( $file = readdir($dh) ) !== false ) {
  echo $file;
  closedir($dh);
}

Таким образом, первый шаг цикла прошел успешно, а вот потом функция readdir(), вместо дескриптора каталога получила пустое значение, что и привело к ошибке. К слову, шаг цикла, приведший к ошибке, отображается в сообщении о таковой.

Если вы сталкивались с ошибкой: readdir(): N is not a valid Directory resource – в других вариантах, буду благодарен за уточнения и примеры. На этом у меня всё. Спасибо за внимание. Удачи!

Короткая ссылка: http://goo.gl/oV2lD2