Увеличить скорость скрипта по работе с файлами

mishkalana

Новичок
Как можно увеличить скорость скрипта который ищет определенный текст $search_text на определенной строке в 10 тысячах файлах на сервере? Я делаю так:

PHP:
while ($file = readdir($do)) 
{
   if ($file == '.' or $file == '..') continue;
   
   $fo = file ($dir.'/'.$file);
  
   if ($search_text != $fo[1]) continue;

   echo 'Текст найден в файле', $file, '<br>';
}
В данной конструкции поиск занимает ~2.6 сек.
Как-то можно оптимизировать чтобы побыстрее?
 

Breeze

goshogun
Команда форума
Партнер клуба
Как-то можно, если не работать напрямую с файлами.
Если на один файл уходит 0.26ms, то ты скорее всего упираешься в дисковый i/o или около того.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
вопрос в том, на сколько тебе надо ускориться.
если на пару порядоков - нужен полнотекстовый поиск
 

Breeze

goshogun
Команда форума
Партнер клуба
вопрос в том, нет ли тут кривости какой.
искать в 10к файлах в определенной строке совпадение.
что вообще там происходит и зачем это делается?
 

WMix

герр M:)ller
Партнер клуба
вопрос в том, нет ли тут кривости какой.
искать в 10к файлах в определенной строке совпадение.
что вообще там происходит и зачем это делается?
ну в принципе, да, он ищет всегда во 2й строчке, по полному совпадению, яб тоже тагнул
 

mishkalana

Новичок
всем спасибо за ответы, благодаря вам решение найдено. Удалось повысить работу скрипта на 900%. Теперь поиск выполняется за 0.29 сек.
решение для php такое:
Код:
exec('grep -r -l -i "needle" /path/', $array);
осталось обработать массив с найденым файлами
 

Breeze

goshogun
Команда форума
Партнер клуба
зачем тогда было писать про поиск в определенной строке, если устраивает любое совпадение?
 

Фанат

oncle terrible
Команда форума
если тебе нужна всегда вторая строка, то самой главной оптимизацией будет не читать ВЕСЬ файл в память да еще и с разбивкой на массив.
Читать надо было первые два килобайта и в них уже искать.
 
Сверху