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最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
解析百度搜索结果link?url=参数分析 (全)
Oct 09 PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
php分页代码学习示例分享
Feb 20 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
PHP中单引号与双引号的区别分析
Aug 19 PHP
windows中为php安装mongodb与memcache
Jan 06 PHP
php中的动态调用实例分析
Jan 07 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
ecshop添加菜单及权限分配问题
Nov 21 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
在smarty中调用php内置函数的方法
2013/02/07 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
php微信开发之百度天气预报
2016/11/18 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
快速排序 php与javascript的不同之处
2011/02/22 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
Python中列表的一些基本操作知识汇总
2015/05/20 Python
python 生成器协程运算实例
2017/09/04 Python
Python 复平面绘图实例
2019/11/21 Python
tensorflow 查看梯度方式
2020/02/04 Python
pytorch数据预处理错误的解决
2020/02/20 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
社区工作者先进事迹
2014/01/18 职场文书
六月份红领巾广播稿
2014/02/03 职场文书
幼儿园小班植树节活动方案
2014/03/04 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript
24年收藏2000多部退役军用电台
2022/02/18 无线电
python通过新建环境安装tfx的问题
2022/05/20 Python