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

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

1. dimcrash - 08 Августа, 2011 - 07:58:03 - перейти к сообщению
У меня проблема:
Нужно постороить дерево файлов. Если встречается каталог, то функция вызывает сама себя.

PHP:
скопировать код в буфер обмена
  1. function scan($dir) {
  2.  
  3. $files = scandir($dir);
  4.  
  5. foreach($files as $item) {
  6. if($item == "." or $item == "..") continue;
  7. echo $item . "<br />";
  8. if(is_dir("/" . $item)) scan($dir . "/" . $item);
  9.  
  10. }
  11. }
  12.  
  13. scan("J:/");


Но здесь она вызывает себя лишь один раз, то есть отображаются файлы лишь на один уровень ниже. Например:

J:/
...home
......192.168.0.102

вместо

J:/
...home
......192.168.0.102
.........www
............и т.д.

Почему это происходит?
2. DeepVarvar - 08 Августа, 2011 - 08:01:54 - перейти к сообщению
if(is_dir($item)) ....
3. dimcrash - 08 Августа, 2011 - 08:09:07 - перейти к сообщению
DeepVarvar пишет:
if(is_dir($item)) ....

Так он вообще не открывает каталоги, а сканирует только заданную директорию
4. DeepVarvar - 08 Августа, 2011 - 08:23:26 - перейти к сообщению
начиная с текущего в котором лежит (с корня диска не советую - пых умрет от натуги):
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function scan(&$dir) {
  4.         $list = "";
  5.         foreach(glob("$dir*") as $item) {
  6.                 if (is_dir($item)) {
  7.                         $dir = $item."/";
  8.                         $item = "<b>$item</b>".scan($dir);
  9.                         }
  10.                 $list .= "<ul><li>$item</li></ul>";
  11.                 }
  12.         return $list;
  13.         }
  14.  
  15. $dir = "";
  16. echo scan($dir);
  17.  
  18. ?>
5. dimcrash - 08 Августа, 2011 - 10:20:54 - перейти к сообщению
DeepVarvar, спасибо! Все работает!

 

Powered by ExBB FM 1.0 RC1