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 :: Версия для печати :: вопрос по работе функции is_dir()
Форумы портала PHP.SU » » Работа с файловой системой и файлами » вопрос по работе функции is_dir()

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

1. i_d_d_q_d - 17 Мая, 2007 - 13:04:15 - перейти к сообщению
Здравствуйте!

Вопрос по работе функции is_dir().
Пытаюсь приспособить её для идентификации обьектов, находящихся в каталоге по приципу каталог/файл. Но наверное что то не так делаю. Дело в том, что корректно опознаются папки/файлы только для содержимого папки в которой находится сценарий или для вложенных в данную папку папок, находящихся выше. В отстальных случаях, функция возвращает false. Данные для is_dir() берутся при помощи функции readdir() (ещё пробовал со scandir() ). Как работает - читал на данном сайте.

На чем крутится сценарий:
FreeBSD 4.x.
Apache 1.3.20rusPL30;
PHP 4.x.

Подскажите пожалуйста, чего именно я в этой жизни не понимаюПодмигиваниеУлыбка

Заранее спасибо
2. UserID - 17 Мая, 2007 - 13:28:59 - перейти к сообщению
i_d_d_q_d пишет:
Здравствуйте!

Вопрос по работе функции is_dir().
Пытаюсь приспособить её для идентификации обьектов, находящихся в каталоге по приципу каталог/файл. Но наверное что то не так делаю. Дело в том, что корректно опознаются папки/файлы только для содержимого папки в которой находится сценарий или для вложенных в данную папку папок, находящихся выше. В отстальных случаях, функция возвращает false. Данные для is_dir() берутся при помощи функции readdir() (ещё пробовал со scandir() ). Как работает - читал на данном сайте.

На чем крутится сценарий:
FreeBSD 4.x.
Apache 1.3.20rusPL30;
PHP 4.x.

Подскажите пожалуйста, чего именно я в этой жизни не понимаюПодмигиваниеУлыбка

Заранее спасибо



Если ты переходишь во вложенный каталог, то нужно дополнить полнуть путь в качестве параметра функции. Т.е. если путь "./path_1/", ты заходишь в него, то проверку внутри этой папки нужно производить с учётом "./path_1/", т.е. "./path_1/path_2/path_3/"
3. i_d_d_q_d - 17 Мая, 2007 - 14:08:28 - перейти к сообщению
Каталог задаю следующим образом:
/pub/home/path/каталог_с_www_док ументами/path_1/

При этом, если сценарий лежит в каталоге path_1
то относительно
/pub/home/path/каталог_с_www_док ументами/path_1/
всё работает (аналогично: /pub/home/path/каталог_с_www_док ументами/path_1/path_1_1 ;
/pub/home/path/каталог_с_www_док ументами/path_1/path_1_1/path_1_ 2 и тд. всё нормально)

Если же сценарий лежит по адресу:
/pub/home/path/каталог_с_www_док ументами/path_1

а требуется получить данные о б обьектах в папках
/pub/home/path/каталог_с_www_док ументами/path_2/
/pub/home/path/каталог_с_www_документами/path_3/
и тд
или
/pub/home/path/каталог_с_www_док ументами/ (те. вообще в корне) ничего не работает, те функция относительно любых обьектов находящихся в папке говорит false (если true - значит обьект - папка)
4. evgenijj - 17 Мая, 2007 - 16:04:02 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. echo "Текущий каталог ".getcwd()."< br/>\\n";
  4. // переходим в директорию dir1 (опускаемся на один уровень вниз)
  5. chdir( "./dir1" );
  6. echo "Перешли в директорию ./dir1: ".getcwd()."< br/>\\n";
  7. echo "Содержимое каталога ".getcwd().":< br/>\\n";
  8. $dir1 = opendir( "." );
  9. echo "<table>\\n";
  10. while ( $d = readdir( $dir1 ) )
  11. {
  12.         echo "<tr>\\n";
  13.         if( is_dir( $d ) ) echo "<td>".$d."</td><td>Каталог</td>\\n";
  14.         if( is_file( $d ) ) echo "<td>".$d."</td><td>".filesize($d)."</td>\\n";
  15.         echo "</tr>\\n";       
  16. }
  17. echo "</table>\\n";
  18. closedir($dir1);
  19. // Возвращаемся в директорию скрипта (поднимаемся на один уровень вверх)
  20. chdir ( ".." );
  21. echo "-------------------------------------------------------< br/>\\n";
  22.  
  23. echo "Текущий каталог ".getcwd()."< br/>\\n";
  24. // переходим в директорию dir2 (опускаемся на один уровень вниз)
  25. chdir( "./dir2" );
  26. echo "Перешли в директорию ./dir2: ".getcwd()."< br/>\\n";
  27. echo "Содержимое каталога ".getcwd().":< br/>\\n";
  28. $dir2 = opendir( "." );
  29. echo "<table>\\n";
  30. while ( $d = readdir( $dir2 ) )
  31. {
  32.         echo "<tr>n";
  33.         if( is_dir( $d ) ) echo "<td>".$d."</td><td>Каталог</td>\\n";
  34.         if( is_file( $d ) ) echo "<td>".$d."</td><td>".filesize($d)."</td>\\n";
  35.         echo "</tr>\\n";       
  36. }
  37. closedir($dir2);
  38. echo "</table>\\n";
  39. // Возвращаемся в директорию скрипта (поднимаемся на один уровень вверх)
  40. chdir ( ".." );
  41. echo "-------------------------------------------------------< br/>\\n";
  42.  
  43. echo "Вернулись в директорию скрипта: ".getcwd()."< br/>\\n";
  44. echo "Содержимое каталога ".getcwd().":< br/>\\n";
  45. $dir = opendir( "." );
  46. echo "<table>\\n";
  47. while ( $d = readdir( $dir ) )
  48. {
  49.         echo "<tr>\\n";
  50.         if( is_dir( $d ) ) echo "<td>".$d."</td><td>Каталог</td>\\n";
  51.         if( is_file( $d ) ) echo "<td>".$d."</td><td>".filesize($d)."</td>\\n";
  52.         echo "</tr>\\n";       
  53. }
  54. echo "</table>\\n";
  55. closedir($dir);
  56. ?>
  57.  

Результат работы:
PHP:
скопировать код в буфер обмена
  1.  
  2. Текущий каталог C:/work/localhost/www/dir
  3. Перешли в директорию ./dir1: C:/work/localhost/www/dir/dir1
  4. Содержимое каталога C:/work/localhost/www/dir/dir1:
  5. .       Каталог
  6. ..      Каталог
  7. admin.php       221
  8. clear.php       101
  9. code.php        362
  10. config.php      1370
  11. csv.php 438
  12. tests   Каталог
  13. zip     Каталог
  14. -------------------------------------------------------
  15. Текущий каталог C:/work/localhost/www/dir
  16. Перешли в директорию ./dir2: C:/work/localhost/www/dir/dir2
  17. Содержимое каталога C:/work/localhost/www/dir/dir2:
  18. .       Каталог
  19. ..      Каталог
  20. banners Каталог
  21. dump    Каталог
  22. offer   Каталог
  23. search.php      7808
  24. shop.php        72952
  25. switch.php      432
  26. -------------------------------------------------------
  27. Вернулись в директорию скрипта: C:/work/localhost/www/dir
  28. Содержимое каталога C:/work/localhost/www/dir:
  29. .       Каталог
  30. ..      Каталог
  31. dir1    Каталог
  32. dir2    Каталог
  33. scandir.php     1784
  34.  
5. i_d_d_q_d - 23 Мая, 2007 - 09:32:14 - перейти к сообщению
Здравствуйте!
Огромное спасибо за помощь.

UserID - за подсказку, благодаря которой свою ошибку понял.

evgenijj - за то, что не пожалели времени и выложили часть кода. В принципе когда Ваш пост был мною увиден, ошибка была исправлена, а сценарий практически реализован (только несколько другим образом). Но всё равно СПАСИБО ОГРОМНОЕ!
Надеюсь, данная тема окажется полезной не только мне.

Всем творческих успехов!

 

Powered by ExBB FM 1.0 RC1