Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Почему могут не работать filetype() is_file() is_dir() и lstat()?
Форумы портала PHP.SU » » Операционная система и системные вызовы » Почему могут не работать filetype() is_file() is_dir() и lstat()?

Страниц (1): [1]
 

1. Lasana - 23 Мая, 2011 - 02:24:21 - перейти к сообщению
Здравствуйте!

Мне нужно выполнить такую простую задачу: сосканировать имена файлов из папки на сервере и вывести имена директорий в одну колонку, а имена файлов - в другую (ну типа как в файл-менеджере)

Открываю папку: $dir_files=scandir($dirname)

И тут начинает нечто непонятное: пытаюсь функцией filetype ($dir_files[$i]) определить, что у меня файл или папка - мне выдаётся Warning: filetype() [function.filetype]: stat failed for filename.jpg (ну и т.д. и т.п.)

пробую is_dir и is_file - оно "видит" только одну папку: корневой каталог, остальные все считает файлами

lstat () и stat () выдают те же варнинги

Почему такое может быть?
2. komprenda - 23 Мая, 2011 - 04:53:55 - перейти к сообщению
Lasana пишет:
Здравствуйте!

Мне нужно выполнить такую простую задачу: сосканировать имена файлов из папки на сервере и вывести имена директорий в одну колонку, а имена файлов - в другую (ну типа как в файл-менеджере)

Открываю папку: $dir_files=scandir($dirname)

И тут начинает нечто непонятное: пытаюсь функцией filetype ($dir_files[$i]) определить, что у меня файл или папка - мне выдаётся Warning: filetype() [function.filetype]: stat failed for filename.jpg (ну и т.д. и т.п.)

пробую is_dir и is_file - оно "видит" только одну папку: корневой каталог, остальные все считает файлами

lstat () и stat () выдают те же варнинги

Почему такое может быть?


нужно полный путь до файла указывать, а не только передавать его имя filetype($dirname . "/" . $dir_files[$i])
3. ugin_root - 23 Мая, 2011 - 09:00:23 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $dirs = @opendir( $path ) or die( 'Нет доступа к каталогу.' );
  2. while( $dir = readdir( $dirs ) )
  3. {
  4.     $dir_name = $path . '/' . $dir;
  5.     if( !is_file( $dir_name ) )
  6.     {//папки
  7.         echo "Каталог: " . $dir . "\n";
  8.     }
  9.     else
  10.     {//файлы
  11.         $size = filesize($dir_name);
  12.         echo "Файл: " . $dir . " Размер (byte): " . $size;
  13.     }
  14. }

(Добавление)
не помню почему именно, но я не стал юзать scandir вместо неё opendir
(Добавление)
обрати внимание на строку под номером 4
4. Lasana - 23 Мая, 2011 - 11:55:02 - перейти к сообщению
[quote=komprenda]
Lasana пишет:
Здравствуйте!

нужно полный путь до файла указывать, а не только передавать его имя filetype($dirname . "/" . $dir_files[$i])


О!
Спасибо! Сработало!
(Добавление)
ugin_root пишет:
PHP:
скопировать код в буфер обмена
  1. $dirs = @opendir( $path ) or die( 'Нет доступа к каталогу.' );
  2. while( $dir = readdir( $dirs ) )
  3. {
  4.     $dir_name = $path . '/' . $dir;
  5.     if( !is_file( $dir_name ) )
  6.     {//папки
  7.         echo "Каталог: " . $dir . "\n";
  8.     }
  9.     else
  10.     {//файлы
  11.         $size = filesize($dir_name);
  12.         echo "Файл: " . $dir . " Размер (byte): " . $size;
  13.     }
  14. }

(Добавление)
не помню почему именно, но я не стал юзать scandir вместо неё opendir
(Добавление)
обрати внимание на строку под номером 4


Спасибо!! Работает!!Улыбка

 

Powered by ExBB FM 1.0 RC1