1

我想在大小为 5GB+ 的 TXT 文件中搜索文本Hello(示例),然后返回整行。

我尝试过使用SplFileObject,但我知道使用行号是必需的SplFileObject,如下所示:

$linenumber = 2094; 
$file = new SplFileObject('myfile.txt');
$file->seek($linenumber-1);
echo $file->current();

但如前所述,我想搜索一个字符串然后获取整行,我不知道行号。

任何帮助,将不胜感激。

4

2 回答 2

2

这应该工作:

<?php
$needle = 'hello';
$count = 1;
$handle = fopen("inputfile.txt", "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        // process the line read.
        $pos = strpos($line, $needle);
        if ($pos !== false) {
            echo $line . PHP_EOL;
            echo "in line: ".$count . PHP_EOL;
            break;
        }
        $count++;
    }

    fclose($handle);
} else {
    // error opening the file.
}
于 2019-03-27T14:41:46.007 回答
-1

这是我可以使用的答案。非常感谢@user3783243

对于 Linux:

exec('grep "Hello" myfile.txt', $return);

对于 Windows:

exec('findstr "Hello" "myfile.txt"', $return);

现在$return应该包含整行。

不幸的是,如果您的服务器管理员在 php.ini 文件中禁用了功能exec(),这将不起作用system()但对我来说它工作正常。

如果有人有更好的解决方案,我很高兴知道:)

于 2019-03-27T14:40:44.733 回答