【发布时间】:2012-05-23 00:47:35
【问题描述】:
类似于:How to read only 5 last line of the text file in PHP?
我有一个很大的日志文件,我希望能够在文件中显示从位置 X 开始的 100 行。
我需要使用fseek 而不是file(),因为日志文件太大。
我有一个类似的功能,但它只会从文件末尾读取。如何修改它以便也可以指定起始位置?我还需要从文件末尾开始。
function read_line($filename, $lines, $revers = false)
{
$offset = -1;
$i = 0;
$fp = @fopen($filename, "r");
while( $lines && fseek($fp, $offset, SEEK_END) >= 0 ) {
$c = fgetc($fp);
if($c == "\n" || $c == "\r"){
$lines--;
if($revers){
$read[$i] = strrev($read[$i]);
$i++;
}
}
if($revers) $read[$i] .= $c;
else $read .= $c;
$offset--;
}
fclose ($fp);
if($revers){
if($read[$i] == "\n" || $read[$i] == "\r")
array_pop($read);
else $read[$i] = strrev($read[$i]);
return implode('',$read);
}
return strrev(rtrim($read,"\n\r"));
}
我要做的是创建一个基于 Web 的日志查看器,它将从文件末尾开始并显示 100 行,当按下“下一步”按钮时,将显示其前面的下 100 行。
【问题讨论】:
-
这里还有更多按效率排序的方法:unix.stackexchange.com/questions/94318/…
标签: php file pagination fseek