• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP读取大文件末尾N行的方法

php 搞代码 4年前 (2022-01-22) 15次浏览 已收录 0个评论

本篇文章主要介绍PHP读取大文件末尾N行的方法,感兴趣的朋友参考下,希望对大家有所帮助。

小文件几兆以内大小,都可以通过file()函数,将文件按行读入数组,在用array_pop取得最后一行,就可以了。

但是对于很大的文本文件来说,机器内存不够大,或者php本身memory_limit有限制,这个办法就不适用了,即使强行不限制,效率也是非常低的。

没有办法了吗?当然有,不过没有现成的函数了,需要自己动手了。

这里需要用到文件指针,学过C的应该知道指针式个嘛玩意,通俗的讲吧,PHP中通过fopen打开一个文件,这时候还没有读取文件,这时候指向的是文件开头,指针位置也就是0,当你通过fgets或者fgetc从文件中读取内容的时候,你读多少,指针也相应往前进多少,这也是

while(!feof($fp)){$data.=fgets($fp,4096);}

得以实现的原理,即fgets是从当前指针位置向后读取指定长度的字符串,直到遇见换行符为止。

那么可不可以控制指针的位置到倒数第N行位置呢?很遗憾,没有,但是可以将指针直接移动到末尾,并倒退N个位置,通过fseek()函数。

我们先将指针移动到末尾,并向后倒退2个位置,通过fgetc读取一个字符,判断这个字符是不是"\n"也就是换行符,如果不是换行符,那么继续倒退一个位置再次判断,直到我们倒退到上一行的结尾换行符为止,直接使用fgets将一整行都取出来即可。这里面用到两个while循环,外层循环控制需要取得的行数,内层循环控制fseek动作。

函数如下:

/** * 取文件最后$n行 * @param string $filename 文件路径 * @param int $n 最后几行 * @return mixed false表示有错误,成功则返回字符串 */function FileLastLines($filename,$n){  if(!$fp=fopen($filename,'r')){    echo "打开文件失败,请检查文件路径是否正确,路径和文件名不要包含中文";    return false;  }  $pos=-2;  $eof="";  $str="";  while($n>0){    while($eof!="\n"){      if(!fseek($fp,$pos,SEEK_END)){        $eof=fgetc($fp);        $pos--;      }else{        break;      }    }    $str.=fgets($fp);    $eof="";    $n--; <i>·本2文来源gaodai$ma#com搞$代*码网2</i><strong>搞gaodaima代码</strong> }  return $str;}echo nl2br(FileLastLines('sss.txt',4));

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐:

PHP实现获取当前文件的父目录方法总结

php微信红包随机生成算法详解

php实现执行非缓冲查询API的三种方法

以上就是PHP读取大文件末尾N行的方法的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP读取大文件末尾N行的方法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址