Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Рекурсии.Ускорения роботы!
 
 автор: ruwap   (08.05.2007 в 16:19)   письмо автору
 
 

Добрый день.
Вот смотрите есть код

<?
$dirname 
".";
    function 
GetCountFiles($dirname
    { 
        
$c 0
        
$dir opendir($dirname); 
        while(
$file readdir($dir)) 
        { 
            if(
$file == '.' || $file == '..'
                continue; 
            if(
is_dir($dirname."/".$file))
            { 
                
$c += GetCountFiles($dirname."/".$file); 
            } 
            elseif(
is_file($dirname."/".$file) && substr($file, -4) != '.txt' and substr($file, -4) != '.gif' and substr($file, -4) != '.jpg' and substr($file, -4) != '.png' and substr($file, -4) != '.php')
            { 
                
$c++; 
            } 
        } 
        return 
$c
    } 
?>


Когда файлов в директории много,он работает очень медленно!
Можно этот код как то модернизировать?
Чтобы быстрей работал!
Реально ли?

   
 
 автор: Trianon   (08.05.2007 в 16:43)   письмо автору
 
   для: ruwap   (08.05.2007 в 16:19)
 

Вар.1. Собирать список файлов в массив. И только после этого уходить в рекурсию.
Вар. 2. Переписать обход на нерекурсивный вариант.

   
 
 автор: ruwap   (08.05.2007 в 17:03)   письмо автору
 
   для: Trianon   (08.05.2007 в 16:43)
 

А примерчег можно?Для варианта 2!

   
 
 автор: Trianon   (08.05.2007 в 17:17)   письмо автору
 
   для: ruwap   (08.05.2007 в 17:03)
 

Нельзя. Можно подсказку.
Обход дерева в ширину (не в глубину) осуществляется без стека, но с помощью двух очередей. В цикле. Рекурсия при этом не требуется.

   
 
 автор: ruwap   (08.05.2007 в 17:37)   письмо автору
 
   для: Trianon   (08.05.2007 в 17:17)
 

Блин,теперь прийдется целый день над этим сидеть.

   
 
 автор: ruwap   (09.05.2007 в 11:04)   письмо автору
 
   для: ruwap   (08.05.2007 в 17:37)
 

Блин,нифига чет не получаиц!
Может все т таки кто то напишет пример?
Пожалусто

   
 
 автор: bronenos   (09.05.2007 в 11:18)   письмо автору
 
   для: ruwap   (09.05.2007 в 11:04)
 

хм... а не надо static $c = 0;?

   
 
 автор: ruwap   (09.05.2007 в 11:29)   письмо автору
 
   для: bronenos   (09.05.2007 в 11:18)
 

$c=0; заменить на static $c = 0;
Если так.то нифига не получаиц :(

   
 
 автор: ruwap   (09.05.2007 в 16:00)   письмо автору
 
   для: ruwap   (09.05.2007 в 11:29)
 

Блин,поднимаю уже второй раз!
Так как не знаю к кому обратится!
Может кто знает

   
 
 автор: Valick   (09.05.2007 в 16:19)   письмо автору
 
   для: ruwap   (09.05.2007 в 16:00)
 

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

   
 
 автор: Shorr Kan   (09.05.2007 в 16:59)   письмо автору
 
   для: Valick   (09.05.2007 в 16:19)
 

Какого типа файлы в каталоге и подкаталогах? Какие расширения?

   
 
 автор: ruwap   (10.05.2007 в 17:05)   письмо автору
 
   для: Shorr Kan   (09.05.2007 в 16:59)
 

jpg,gif,png

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования