У меня есть ОГРОМНЫЙ файл, в котором есть строки данных (в значительной степени одинаковой длины). Я хотел бы просмотреть их и найти каждое происхождение определенного слова, а затем взять всю строку, где это слово произошло, и вывести его на экран. В настоящее время я использую этот метод:Поиск фразы в TXT-файле с PHP
$result_counter = 0;
$result_array[1] = 'No results';
$search_slug = $request->input('search_slug');
$fp = fopen(base_path('storage\app\xas.txt'), "r");
while (false !== ($line = fgets($fp))) {
// Process $line, e.g split it into values since it is CSV.
$exploded = explode('-', $line);
$exploded = implode('', $exploded);
set_time_limit(30);
if(strpos($exploded, strtoupper($search_slug))) {
$result_counter++;
$result_array[$result_counter] = $exploded;
}
}
return view('results')->with(array('results' => $result_array, 'query' => $search_slug));
fclose($fp);
Переход по линии через огромный файл занимает слишком много времени.
Вы можете спросить - почему вы не используете MySQL?
Существует огромная проблема с этим - мой файл составляет 2,5 миллиона строк в длину и может быть еще большим. Владелец моего сервера запретит мою учетную запись, если я попытаюсь обновить базу данных за один раз, не говоря уже о том, что люди собираются запрашивать большие ее части ежечасно. Я также не могу позволить себе «безграничный» сервер. Я перейду к MySQL, как только это станет возможно, но сейчас мне нужно быстрое решение.
Как решить эту проблему с помощью PHP? Есть ли способ поиска слов в файле, а затем захват только этих строк?
Я хотел бы использовать фактический поисковый индекс, как Lucene (или любой другой современный эквивалент). Некоторые подсказки здесь ~ http://stackoverflow.com/questions/2010663/lucene-with-php – Phil
О, я не знал этого, спасибо за подсказку, я исследую его. –
Может быть системный вызов 'grep'? – fpierrat