需求如下:

现有一个1G左右的日志文件,大约有500多万行, 用php返回最后几行的内容。

实现方法:

function tail($fp,$n,$base=5)
{
    assert($n>0);
    $pos = $n+1;
    $lines = array();
    while(count($lines)<= $n){
        try{
            fseek($fp,-$pos,SEEK_END);
        } catch (Exception $e){
            fseek(0);
            break;
        }
        $pos *= $base;
        while(!feof($fp)){
            array_unshift($lines,fgets($fp));
        }
    }
    return array_slice($lines,0,$n);
}

$arr = tail(fopen("log.txt","r+"),100);
unset($arr[0]);
$lastTime = $nowtime;

foreach($arr as $v)
{
    echo $v.'<br/>';
}