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压缩html网页代码(清除空格,换行符,制表符,注释标记)
Apr 02 PHP
php切割页面div内容的实现代码分享
Jul 31 PHP
PHP面向对象详解(三)
Dec 07 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
Dec 31 PHP
PHP.vs.JAVA
Apr 29 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
Jun 15 PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 PHP
PHP基于SMTP协议实现邮件发送实例代码
Apr 27 PHP
PHP实现断点续传乱序合并文件的方法
Sep 06 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 PHP
CentOS7编译安装php7.1的教程详解
Apr 18 PHP
imagettftext() 失效,不起作用
Mar 09 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 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
PHP安全配置详细说明
2011/09/26 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
PHP实现简易计算器功能
2020/08/28 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
使用python 和 lint 删除项目无用资源的方法
2017/12/20 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
物业管理专业个人的自我评价
2013/11/19 职场文书
爱情保证书范文
2014/02/01 职场文书
重阳节登山活动方案
2014/02/03 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
Java 数据结构七大排序使用分析
2022/04/02 Java/Android