Почему читаются не все файлы из дериктории?

vamfirius

Новичок
Почему читаются не все файлы из дериктории?

$dir="../bookpages";
$dp=opendir($dir);
while(readdir($dp))
{
$rfile=readdir($dp);
$rfiles[]=$rfile;
print "$rfile";
}

Выводит около половины файлов. В чём может быть проблема. Помогите разобраться.
 

vamfirius

Новичок
И что найду там ответ? Или это просто отговорка на все случаи жизни?))

-~{}~ 03.06.10 12:24:

Это я к тому что я впринципе знаю как они работают, правда не из этого мануала. И то что я о них знаю никак не объясняет их поведения.
 

mity

Новичок
vamfirius, Вы неправильно задаёте вопрос.
Нужно примерно так.
Операционная система такая-то, php, такой-то запускается из консоли и из апача.

Функция readdir() отказывается читать некоторые файлы, хотя fopen() и scandir() их открывает, stat() для таких файлов ничего особенного не показывает.

Я уверен, если Вы правильно сформулируете свой вопрос, то часть проблем отпадёт сама собой.

Открывайте директорию всегда по полному пути, и выводите путь. Кто за Вас будет закрывать директорию?

PHP:
  ini_set('display_errors',1); 
  error_reporting(E_ALL);

  $NameDir=getcwd()."/../bookpages";
  
  echo "<pre>";
  if ($dh = @opendir($NameDir)) {
    echo $NameDir."\n";
    while (($file = readdir($dh)) !== false) {
      echo $file."\n";
      };
   
    closedir($dh);
    };
  
  echo "======================================\n";
  print_r( scandir($NameDir));
  
  echo "</pre>";
 

craz

Нестандартное звание
Кто за Вас будет закрывать директорию?
а разве она после работы скрипта не закрывается автоматически? - это не сарказм, просто интересно..
 

mity

Новичок
craz, да но только после окончания работы скрипта.
Например есть "долгоиграющий" скрипт, который периодически перечисляет все директории в системе. Соответственно хенды (ядерные и пхпшные) будут накапливаться.
 

vamfirius

Новичок
Ага а если я понимаю только около половины написанного вначале твоего сообщения? Но суть верна scandir и всё остальное читает а readdir нет, хотя про scandir я честно говоря узнал только что из мануала, за минуту до твоего сообщения, и у меня возник другой вопрос - зачем нужен readdir если есть scandir ведь они по сути возвращают один и тот же результат, только scandir возвращает многомерный массив а readdir просто массив, и к тому же как видно из моего случая работает по обстоятельствам.
 

mity

Новичок
vamfirius, и что мой пример сверху и с низу возвращает разное количество файлов/папок?
 

vamfirius

Новичок
Хм...Нет. Если есть желание можешь объяснить, если нет сам разберусь попозже. Ща пойду смотреть Undisputed 3)))
 

mity

Новичок
в имени дирекории есть файл с пробелом или нулём, там же в документации написано. И пример приведён правильный.
 

prolis

Новичок
Капитан просил спросить, сколько файлов за один цикл считывается?
PHP:
while(readdir($dp))
{
$rfile=readdir($dp);
}
 

Фанат

oncle terrible
Команда форума
рекомендую внимательно посмотреть код prolis-а.
не буквально, а внимательно.

он очень наглядно показал проблему.
 

vamfirius

Новичок
Всмысле? - память грузить будет?

-~{}~ 03.06.10 15:46:

Кстати за один цикл это всмысле сколько файлов в директории или сколько за один проход? Если второе то я не знаю.

-~{}~ 03.06.10 15:52:

Посмотрел, сколько не скажу. Щитать лень. Вобщем дохрена. Гдето пятая от общего колличества.
 

vamfirius

Новичок
Я так понимаю проблема в этом, но саму суть уловить не получается. Видимо сказывается нехватка опыта в программировании. Объясните если не впадлу)))

-~{}~ 03.06.10 15:56:

-~{}~ 03.06.10 15:59:

Да мне внатуре отдохнуть не помешает.

-~{}~ 03.06.10 16:04:

Спасибо за помощь. Пойду посплю. Потом всё хорошенько обдумаю.
 
Сверху