在php中读取大文件并逐行导航

在php中读取大文件并逐行导航,php,Php,我正在用php开发一个日志文件查看器,它应该从文件中读取10行(比如2GB),当用户单击next时,随后的10行必须被读取。 按下后退按钮时,必须打印最后10行 到目前为止,我已经使用fgets实现了文件读取(由于文件的大小),我试图找出如何查找下10行和前10行 if($handle) { $cnt=1; while(($buffer=fgets($handle))!==false and $cnt<=10) { echo $buffer;

我正在用php开发一个日志文件查看器,它应该从文件中读取10行(比如2GB),当用户单击next时,随后的10行必须被读取。 按下后退按钮时,必须打印最后10行

到目前为止,我已经使用fgets实现了文件读取(由于文件的大小),我试图找出如何查找下10行和前10行

if($handle)
{
    $cnt=1;
    while(($buffer=fgets($handle))!==false and $cnt<=10) {
        echo $buffer;
        $cnt++;
    }
    if(feof($handle)) {
        echo "error";
    }

}
if($handle)
{
$cnt=1;

而(($buffer=fgets($handle))!==false和$cntPHP中的SplFileObject类执行您想要执行的操作。请参阅:

示例代码:

<?php
// Set $lineNumber to the line that you want to start at
// Remember that the first line in the file is line 0
$lineNumber = 43;
// This sets how many lines you want to grab
$lineCount = 10;

// Open the file
$file = new SplFileObject("logfile.log");

// This seeks to the line that you want to start at
$file->seek($lineNumber);

for($currentLine=0; $currentLine < $lineCount; $currentLine++) {
    echo $file->current();
    $file->next();
}
?>


我会用shell执行
exec()来实现这一点
并使用
tail
函数解析最后10行。前端使用什么?Web浏览器?是的。Web浏览器-jquery在php后端启动操作这对大于2gb的大文件有效吗?另外,当用户单击“下一步”按钮时..我需要再次创建$file对象吗?对大文件应该可以正常工作。因为您是cal如果要从web上获取此信息,您可能每次都必须打开$file,除非您希望构建某种服务器进程,以保持日志文件始终处于打开状态,并提供客户端应用程序请求的10行内容(可能通过AJAX调用)。也就是说,出于您的目的,您可能只需使用简单的实现即可(也就是说,使用SplFileObject打开文件,获取所需的10行代码,然后将其回传给用户)。顺便说一句,我(在从事服务器设备项目时)采取的另一种方法是构建一个后端进程,将日志文件提交到数据库(在这种情况下是MySQL),然后我们可以快速查询以获取日期范围、消息的特定类型、日志行的特定编号和范围等。