我有一個巨大的文件,其中有數據行(幾乎相同長度)。我想瀏覽它們並找到某個單詞的每一個出現,然後將該單詞出現在整個行中並將其回顯到屏幕上。目前我正在使用這種方法:用PHP搜索.txt文件中的短語
$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?
存在一個巨大的問題 - 我的文件長度爲250萬行,可能很快就會變大。如果我一次嘗試更新數據庫,我的服務器的所有者將禁止我的帳戶,更不用說人們將按小時查詢大部分數據庫的事實。我買不起「無限制」的服務器。我會盡快遷移到MySQL,但現在我需要一個快速解決方案。
如何使用PHP解決此問題?有沒有辦法搜索文件中的單詞出現,然後只抓取這些行?
我會使用像Lucene的實際搜索索引(或任何現代當量)。一些提示在這裏〜http://stackoverflow.com/questions/2010663/lucene-with-php – Phil
哦,我不知道,謝謝你的提示,我會研究它。 –
也許系統調用'grep'? – fpierrat