проблема с is_dir / is_file

zz8

Новичок
Вроде простейший скрипт, но у меня уже мозг вскипел...
Скрипт должен пробежать по папке и выдать имена файлов.

PHP:
$dir = opendir ('./papka');
			$arr = array();
			while ($file = readdir($dir)){
					if ($file=="." or $file=="..")
					continue;
					if (is_dir($file))
					continue;
					$arr[] = $file; // записываем только файлы	
		}
В /papka/ 3 jpg файла, 1 txt и одна папка. Скрипт возвращает пустой массив. Почему? Заранее, спасибо.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
зачем там continue в стором условии?
 

zz8

Новичок
PHP:
 $dir = opendir ('./papka');
            $arr = array();
            while ($file = readdir($dir)){
                    if ($file=="." or $file==".." or is_dir($file))
                    continue;
                    $arr[] = $file; // записываем только файлы    
        }
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
*рука-лицо*

Я говорил про continue, а не чтобы ты убрал условие
 

zz8

Новичок
если встречается ".", ".." или папка - итерация прерывается и начинается следующая. Если файл - добавляется в массив.
 

Adelf

Administrator
Команда форума
c0dex
он не убрал. он "отрефакторил" :) на самом деле все ок - в задаче не требуется лезть внутрь папок.

zz8
посмотри очень внимательно описание функции readdir.

Ой не то.
if (is_dir($file)) - здесь идет неправильная проверка. тебе надо полный путь указывать.
Но наверняка не это - причина пустого массива. Пока не знаю я как там у тебя.

И всетаки обрати внимание на:
PHP:
    /* Именно этот способ чтения элементов каталога является правильным. */
    while (false !== ($entry = readdir($handle))) {
        echo "$entry\n";
    }

    /* Это НЕВЕРНЫЙ способ обхода каталога. */
    while ($entry = readdir($handle)) {
        echo "$entry\n";
    }
У тебя имя файла может начинаться с нуля и тогда цикл завершается.
 
Сверху