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之第二天
Oct 09 PHP
php判断字符以及字符串的包含方法属性
Aug 30 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
php学习之 数组声明
Jun 09 PHP
PHP迭代器的内部执行过程详解
Nov 12 PHP
11个PHPer必须要了解的编程规范
Sep 22 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
PHP直接修改表内容DataGrid功能实现代码
Sep 24 PHP
php实现留言板功能(会话控制)
May 23 PHP
php readfile()修改文件上传大小设置
Aug 11 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
layui数据表格自定义每页条数limit设置
Oct 26 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给大家讲解防刷票的一些技巧
2015/11/18 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
让焦点自动跳转
2006/07/01 Javascript
又一个图片自动缩小的JS代码
2007/03/10 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
python可视化实现代码
2019/01/15 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
Django实现celery定时任务过程解析
2020/04/21 Python
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
Coggles美国/加拿大:高级国际时装零售商
2018/10/23 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
美术教学感言
2014/02/22 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
文明倡议书范文
2014/04/15 职场文书
捐资助学倡议书
2014/04/15 职场文书
志愿者宣传口号
2014/06/17 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
小学音乐课教学反思
2016/02/18 职场文书