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的单引号和双引号 字符串效率
May 27 PHP
php下使用curl模拟用户登陆的代码
Sep 10 PHP
PHP版国家代码、缩写查询函数代码
Aug 14 PHP
php添加文章时生成静态HTML文章的实现代码
Feb 17 PHP
php漏洞之跨网站请求伪造与防止伪造方法
Aug 15 PHP
分享PHP header函数使用教程
Sep 05 PHP
php单例模式示例分享
Feb 12 PHP
PHP获取POST数据的几种方法汇总
Mar 03 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
Laravel框架搜索分页功能示例
Feb 01 PHP
php定期拉取数据对比方法实例
Sep 22 PHP
PHP的new static和new self的区别与使用
Nov 27 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
php self,$this,const,static,-&amp;gt;的使用
2009/10/22 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
YII框架批量插入数据的方法
2017/03/18 PHP
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
openlayers4.6.5实现距离量测和面积量测
2020/09/25 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
简单解析Django框架中的表单验证
2015/07/17 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
Python调用接口合并Excel表代码实例
2020/03/31 Python
Python中实现输入一个整数的案例
2020/05/03 Python
python爬虫爬取网页数据并解析数据
2020/09/18 Python
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
数控技术应届生求职信
2013/11/13 职场文书
计算机学生的自我评价分享
2014/02/18 职场文书
亮化工程实施方案
2014/03/17 职场文书
动物科学专业求职信
2014/07/27 职场文书
授权收款委托书
2014/09/23 职场文书
详解Go与PHP的语法对比
2021/05/29 PHP
MongoDB使用场景总结
2022/02/24 MongoDB