Php 如何快速搜索文本文件中非常大的字符串/记录列表?

Php 如何快速搜索文本文件中非常大的字符串/记录列表?,php,Php,我有一些文本文件大小(500mb)。我需要一个脚本,搜索给定的字符串从这个文本文件第一次尽可能。我在努力 $query="demo"; $FileName = "search.txt"; $fh = fopen($FileName, 'r') or die("Can't open file"); $data = fread($fh, filesize($FileName)); $items = explode(" ", $data); $Pos = array_search ($query, $

我有一些文本文件大小(500mb)。我需要一个脚本,搜索给定的字符串从这个文本文件第一次尽可能。我在努力

$query="demo";
$FileName = "search.txt";
$fh = fopen($FileName, 'r') or die("Can't open file");
$data = fread($fh, filesize($FileName));
$items = explode(" ", $data);
$Pos = array_search ($query, $items);
if($Pos !== FALSE)
{
    echo "Found";
}
else
{
    echo "Not Found";
}
是否有任何脚本或算法可以更快地搜索?
提前谢谢

不要读取整个文件。 逐行阅读并检查
$query
是否包含在该行中(假设结果不能包含在多行中):


最快的工具可能是
grep
,它是非常低级的手动调优工具,完全是为了这个目的。sed也会像grep是一个命令行一样完成它tool@deceze如果您不需要正则表达式,可能会更快检查alsois有没有不逐行搜索文件的方法?因为这是一个非常漫长的过程@DarhazerYeah,建立一个索引:)或者使用一个数据库,它们已经支持很多你需要的东西。在您的解决方案中,您正在读取整个文件,然后逐字拆分和搜索,在我的解决方案中,您正在读取,直到您真正找到数据。如果数据在文件的末尾,速度不会快很多。但仍然会更快,因为不会占用500 MB的内存
$query = 'demo';
$fileName = 'search.txt';
$file = fopen($fileName, 'r') or die("Can't open file");

while ($line = fgets($file)) {
    if (strpos($query, $line) !== false ) {
        $found = true;
        break;
    }
}

fclose($fh);