php fseek函数读取大文件两种方法


Posted in PHP onOctober 12, 2016

php读取大文件,使用fseek函数是最为普遍的方式,它不需要将文件的内容全部读入内存,而是直接通过指针来操作,所以效率是相当高效的.在使用fseek来对文件进行操作时,也有多种不同的方法,效率可能也是略有差别的,下面是常用的两种方法.

方法一:

首先通过fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取这一行的数据,再找次一行的起始位置,再取这一行的位置,依次类推,直到找到了$num行。实现代码如下:

整个代码执行完成耗时 0.0095 (s)

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);
}
var_dump(tail(fopen("access.log","r+"),10));

 方法二 :

还是采用fseek的方式从文件最后开始读,但这时不是一位一位的读,而是一块一块的读,每读一块数据时,就将读取后的数据放在一个buf里,然后通过换行符(n)的个数来判断是否已经读完最后$num行数据.实现代码如下

整个代码执行完成耗时 0.0009(s).

$fp = fopen($file, "r");
$line = 10;
$pos = -2;
$t = " ";
$data = "";
while ($line > 0) {
  while ($t != "n") {
    fseek($fp, $pos, SEEK_END);
    $t = fgetc($fp);
    $pos --;
  }
  $t = " ";
  $data .= fgets($fp);
  $line --;
}
fclose ($fp);
echo $data

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
无数据库的详细域名查询程序PHP版(2)
Oct 09 PHP
用来解析.htgroup文件的PHP类
Sep 05 PHP
php单例模式实现(对象只被创建一次)
Dec 05 PHP
php数组删除元素示例
Mar 21 PHP
PHP调用Linux命令权限不足问题解决方法
Feb 07 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
Mar 03 PHP
php eval函数一句话木马代码
May 21 PHP
php生成动态验证码gif图片
Oct 19 PHP
php通过淘宝API查询IP地址归属等信息
Dec 25 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
IIS 7.5 asp Session超时时间设置方法
Apr 17 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
Sep 17 PHP
PHP从二维数组得到N层分类树的实现代码
Oct 11 #PHP
php 无限分类 树形数据格式化代码
Oct 11 #PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 #PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
Oct 11 #PHP
php外部执行命令函数用法小结
Oct 11 #PHP
php字符串操作常见问题小结
Oct 11 #PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 #PHP
You might like
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
JavaScript 常用函数库详解
2009/10/21 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
JQuery表格内容过滤的实现方法
2013/07/05 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
jQuery动态生成的元素绑定事件操作实例分析
2019/05/04 jQuery
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
全面理解Python中self的用法
2016/06/04 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
tensorflow实现对图片的读取的示例代码
2018/02/12 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
八年级生物教学反思
2014/01/22 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
推荐信范文大全
2015/03/27 职场文书
圣诞晚会主持词
2015/07/01 职场文书
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers