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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Рекурсия функции

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Не работает
dimcrash
Отправлено: 08 Августа, 2011 - 07:58:03
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




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

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
............и т.д.

Почему это происходит?

(Отредактировано автором: 08 Августа, 2011 - 08:08:11)

 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Августа, 2011 - 08:01:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




if(is_dir($item)) ....
 
 Top
dimcrash
Отправлено: 08 Августа, 2011 - 08:09:07
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




DeepVarvar пишет:
if(is_dir($item)) ....

Так он вообще не открывает каталоги, а сканирует только заданную директорию
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Августа, 2011 - 08:23:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




начиная с текущего в котором лежит (с корня диска не советую - пых умрет от натуги):
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. ?>

(Отредактировано автором: 08 Августа, 2011 - 08:24:32)

 
 Top
dimcrash
Отправлено: 08 Августа, 2011 - 10:20:54
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




DeepVarvar, спасибо! Все работает!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB