php工具函数,读取文件最后N行

使用函数

使用的函数:fopen,fseek,fgetc,array_unshift,implodefgets

工作原理

  1. fopen打开文件获得文件指针;
  2. fseek在打开的文件中定位,先移动到文件末尾之前的-2位置;
  3. fgetc在内层while循环中,逐个字符倒着读取并拼接起来(也可以用fgets读取一行);
  4. array_unshift在外层循环中,把读取的每一行字符插入到数组的开头;
  5. 外层while循环判断n行是否读取完成,如果完成implode函数拼接数据,并返回。

源代码

/**
 * 工具函数,读取文件最后$n行
 * @param   string      $filename 文件的路径
 * @param   int         $n 文件的行数
 * @return  string
 */
function FileLastLines($filename, $n = 1)
{
    // 文件存在并打开文件
    if(!is_file($filename) || !$fp = fopen($filename, 'r'))
    {
        return false;
    }
    $pos = -2;
    $eof = '';
    $lines = array();
    while($n > 0)
    {
        $str = '';
        while($eof != "\n")
        {
            //在打开的文件中定位
            if(!fseek($fp, $pos, SEEK_END))
            {
                //从文件指针中读取一个字符
                $eof = fgetc($fp);
                $pos--;
                $str = $eof . $str;
            }else{
                break;
            }
        }
        // 插入到数组的开头
        array_unshift($lines, $str);
        $eof = '';
        $n--;
    }
    return implode('', $lines);
}
最后修改:2021 年 07 月 23 日 08 : 05 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论