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]   

> Без описания
romanov
Отправлено: 22 Октября, 2014 - 17:36:10
Post Id


Гость


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


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




Написал функцию на 29 000 итерации виснет браузер , что здесь может быть не так

Структура каталогов
foto/photo/12334/foto/123.jpg
foto/photo/13d34/foto/1d2.jpg
.....

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4. function recurs($path){
  5.  
  6.   $dir = opendir ($path);
  7.  
  8.   while ( $file = readdir ($dir))
  9.   {
  10.         $i++;
  11.     if (( $file != ".") && ($file != ".."))
  12.     {
  13.          
  14.        
  15.           if (is_file($bread_crumb)){
  16.                
  17.                 $path_nn.= $bread_crumb;
  18.                
  19.                 //$fp = fopen('paths.txt', 'a');
  20.                
  21.                 //fwrite($fp, $path_nn."\n");
  22.                
  23.                 $path_nn = '';
  24.        
  25.                 continue(1);
  26.                 }
  27.           recurs($bread_crumb);
  28.  
  29.     }
  30.        
  31.         if ($i == 26000)
  32.         break;
  33.  
  34.   }
  35.  }
  36.  
  37.  
  38.  recurs('../foto/photo');
  39.  
 
 Top
Panoptik
Отправлено: 22 Октября, 2014 - 17:44:56
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




а зачем все дерево выплевывать в браузер?
ограничивайтесь 1-2, максимум 3 уровнями, а дальше подгрузка аяксом


-----
Just do it
 
 Top
3d_killer
Отправлено: 22 Октября, 2014 - 17:46:07
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




может комп слабоват чтобы это на экран вывести? зачем выводить такое количество?
 
My status
 Top
romanov
Отправлено: 22 Октября, 2014 - 18:32:45
Post Id


Гость


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


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




Вообще я написал чтобы посоветоваться нормальный ли это способ, а если сразу в файл писать , вся структура каталога в файл запишется ?

Panoptik как ajax снизит загрузку и зачем лучше аяксом ?

3d_killer пишет:
зачем выводить такое количество?
. Проверить что скрипт до конца отрабатывает

У МЕНЯ БРАУЗЕР НЕ ВИСНЕТ , А СТРАНИЦА ДОЛГО ГРУЗИТСЯ

(Отредактировано автором: 22 Октября, 2014 - 18:37:13)

 
 Top
Panoptik
Отправлено: 22 Октября, 2014 - 18:41:24
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




ну значит похоже на то что на какой-то итерации у вас не правильное условие выхода из рекурсии и оно длится вечно

continue(1) вроде нужно заменить просто на continue


-----
Just do it
 
 Top
DelphinPRO
Отправлено: 22 Октября, 2014 - 22:14:08
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




Защита от бесконечной рекусии: Улыбка
PHP:
скопировать код в буфер обмена
  1. function recurs() {
  2.   static $max_depth = 50;// Максимальная вложенность
  3.   static $depth = 0;
  4.   $depth++;
  5.   if ($depth > $max_depth){
  6.     throw new \Exception('Достигнута максимальная глубина рекурсии... Облом.');
  7.   }
  8.   // Дальше код функции
  9.   //....
  10. }

(Добавление)
romanov пишет:
что здесь может быть не так

Например, неизвестно откуда взявшаяся переменная $path_nn
(Добавление)
я уж не говорю о $bread_crumb

Похоже все переменные написаны от балды Улыбка
(Добавление)
начинается цикл, проверяются точки, в is_file передается пустота, условие не срабатывает, фунция рекурсивно вызывает себя, передавая параметром пустоту. Итог - Дальше 27 строки этот код никогда не выполнится.


-----
Чем больше узнаю, тем больше я не знаю.
 
 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