Чтение большого текстового файла php

У меня есть текстовый файл журнала, около 600 МБ.

Я хочу прочитать его с помощью php и отобразить данные на html-странице, но мне нужны только последние 18 строк, которые были добавлены каждый раз при запуске скрипта.

Поскольку это большой файл, я не могу его прочитать, а затем перевернуть массив, как я бы надеялся. Это их другой путь?

Solutions Collecting From Web of "Чтение большого текстового файла php"

Используйте fopen , filesize и fseek чтобы открыть файл и начать читать его только в конце файла.

Комментарии на странице руководства fseek включают полный код для чтения последних X строк большого файла.

вы можете перебросить его назад

 $file = popen("tac $filename",'r'); while ($line = fgets($file)) { echo $line; } 

Загрузка этого файла размера в память, вероятно, не была бы хорошей идеей. Это должно помочь вам в этом.

 $file = escapeshellarg($file); $line = 'tail -n 18 '.$file; system($line); 

Лучший способ сделать это – использовать fread и fgets для чтения по очереди, это очень быстро, так как только одна строка считывается за один раз, а не файл while:

Пример использования:

 $handle = fopen("/logs/log.txt", "r") if ($handle) { fseek($handle,-18,SEEK_END); //Seek to the end minus 18 lines while (!feof($handle)) { echo fgets($handle, 4096); //Make sure your line is less that 4096, otherwise update $line++; } fclose($handle); } 

Для записи была та же проблема и каждый раз пробовал каждое решение.

Оказывается, что путь Dagon по умолчанию «tac $ filename» является самым быстрым, а самый низкий – с самой низкой памятью и загрузкой процессора.

Протестировано с журналом журнала 2Gb, который считывает 500, 1000 и 2000 строк каждый раз. Гладкий; плавный. Спасибо.