Ищите текст в 5 ГБ + файле, затем получайте всю строку - PullRequest
1 голос
/ 27 марта 2019

Я хочу найти текст Hello (пример) в TXT-файле размером 5 ГБ +, а затем вернуть всю строку.

Я пытался использовать SplFileObject, но я знаю, чтономер строки должен использовать SplFileObject, например:

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

Но, как уже упоминалось, я хочу найти строку, а затем получить всю строку, я не знаю номер строки.

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 27 марта 2019

это должно работать:

<?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.
}
0 голосов
/ 27 марта 2019

Это ответ, который я могу использовать. Большое спасибо @ user3783243

Для Linux:

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

Для Windows:

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

Теперь $return должен содержать всю строку.

К сожалению, это не работает, если функции сервера exec() и system() отключены администратором сервера в файле php.ini. Но у меня все работает нормально.

Если у кого-то есть лучшее решение, я буду рад его узнать:)

...