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]   

> Описание: Оптимизация
Okula
Отправлено: 15 Февраля, 2012 - 14:32:22
Post Id



Участник


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


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




Выделено в отдельную тему из темы "Рекурсивное чтение директории"
А у меня ещё меньше кода Улыбка
PHP:
скопировать код в буфер обмена
  1. /**
  2.  * Рекурсивное сканирование
  3.  *
  4.  * @param string $path_dir путь до сканируемой папки
  5.  * @return array массив с абсолютным путём
  6.  */
  7. function getArrayFiles($path_dir) {
  8.     $array_path = array();
  9.     $dir = new RecursiveDirectoryIterator($path_dir);
  10.     foreach(new RecursiveIteratorIterator($dir) as $val) {
  11.         if($val->isFile()) {
  12.             $array_path[] = $val->getPathname();
  13.         }
  14.     }
  15.     return $array_path;
  16. }

(Добавление)
EuGen, твоя функция с array_marge() будет долго работать.

(Отредактировано автором: 15 Февраля, 2012 - 14:37:40)

 
 Top
EuGen Администратор
Отправлено: 15 Февраля, 2012 - 14:50:34
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Выделено в отдельную тему из темы "Рекурсивное чтение директории"
Okula
Можно еще "короче"
PHP:
скопировать код в буфер обмена
  1. $sPath     = "/path/to/dir";
  2. $rgResult = array_map("basename", explode(PHP_EOL, shell_exec('find '.$sPath.' -type "f"')));

- речь про то, стоит ли правильность приносить в жертву краткости.

Еще раз про array_merge - там 100000+ файлов, чтобы почувствовать разницу?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Okula
Отправлено: 15 Февраля, 2012 - 14:58:39
Post Id



Участник


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


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




Выделено в отдельную тему из темы "Рекурсивное чтение директории"
На простых хостингах такой вариант не сработает, да и кто му же - зачем писать велосипед, если это можно написать с помощью итераторов. К тому же куда удобнее Улыбка
Кстати, проверил твою функцию она у меня не сработала.

Тест по моей функции:
PHP:
скопировать код в буфер обмена
  1. Количество просканируемых файлов: 3253
  2. Количество вложенных папок: 339
  3. Среднее время выполнение скрипта: 0.08139 сек.
 
 Top
EuGen Администратор
Отправлено: 15 Февраля, 2012 - 15:11:06
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Выделено в отдельную тему из темы "Рекурсивное чтение директории"
Okula
Оно и понятно, что итератор в данном случае сработает куда быстрее, я иллюстрировал
EuGen пишет:
стоит ли правильность приносить в жертву краткости

Ну и код для *nix сделан, разумеется.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 15 Февраля, 2012 - 15:25:10
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Выделено в отдельную тему из темы "Рекурсивное чтение директории"
В равных условиях - результат 0.32с и 0.37с для итератора и явной рекурсии соответственно.
Вызов шелла справился за 0.17с.
Директория на 15034 файла (сырцы PHP-5.3.9)

Ведь про кэш ФС не забыли при тесте?

PS: первая функция, GetFilesArr которая, - виндовая. '\\' надо на DIRECTORY_SEPARATOR поменять и будет кроссплатформенная.


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 15 Февраля, 2012 - 15:32:27
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Выделено в отдельную тему из темы "Рекурсивное чтение директории"
У меня собственно результат другой. Шелл быстрее всех в два раза как и у Вас, но рекурсия сильно сдала.

Выделил в отдельную тему


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Okula
Отправлено: 15 Февраля, 2012 - 15:55:59
Post Id



Участник


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


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




Перенесено из темы "Рекурсивное чтение директории"
Зачем удалили мои посты? У меня был рабочий вариант функции с кодом куда лучше.
Пишу ешё раз.
PHP:
скопировать код в буфер обмена
  1. /**
  2.  * Рекурсивное сканирование
  3.  *
  4.  * @param string $path_dir путь до сканируемой папки
  5.  * @return array массив с абсолютным путём
  6.  */
  7. function getArrayFiles($path_dir) {
  8.     $array_path = array();
  9.     $dir = new RecursiveDirectoryIterator($path_dir);
  10.     foreach(new RecursiveIteratorIterator($dir) as $val) {
  11.         if($val->isFile()) {
  12.             $array_path[] = $val->getPathname();
  13.         }
  14.     }
  15.     return $array_path;
  16. }
 
 Top
illy
Отправлено: 15 Февраля, 2012 - 17:58:52
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


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




Okula, спасибо.
Добавил скрипт в коллекцию. Хорошо


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Мелкий Супермодератор
Отправлено: 15 Февраля, 2012 - 18:15:07
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Okula, никуда не удаляли. Первое сообщение этой темы.


-----
PostgreSQL DBA
 
 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