php读取大文本文件日志

时间:2011-01-27 21:37:04

标签: php

我有一个文本日志文件,大约600 MB。

我想用php阅读它并在html页面上显示数据,但我只需要每次运行脚本时添加的最后18行。

由于它是一个大文件,我无法读取所有内容然后翻转数组,正如我所希望的那样。他们是另一种方式吗?

5 个答案:

答案 0 :(得分:2)

使用fopenfilesizefseek打开文件,然后只在文件末尾附近开始阅读。

fseek手册页上的评论包括读取大文件最后X行的完整代码。

答案 1 :(得分:1)

将该大小文件加载到内存中可能不是一个好主意。这应该可以解决这个问题。

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

答案 2 :(得分:1)

您可以使用

向后流式传输
$file = popen("tac $filename",'r');

while ($line = fgets($file)) {
  echo $line;
}

答案 3 :(得分:0)

执行此操作的最佳方法是使用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);
}

答案 4 :(得分:0)

为了记录,遇到了同样的问题并尝试了解决方案。

原来Dagon的popen“tac $filename”方式是最快的,也是内存和CPU负载最低的方式。

使用2Gb日志文件进行测试,每次读取500,1000和2000行。平滑。谢谢。