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 ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
PHP新手用的Insert和Update语句构造类
Mar 31 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
Aug 10 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
Yii框架form表单用法实例
Dec 04 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
PDO::rollBack讲解
Jan 29 PHP
提高Laravel应用性能方法详解
Jun 24 PHP
php屏蔽错误及提示的方法
May 10 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函数utf8转gb2312编码
2006/12/21 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
拥抱模块化的JavaScript
2012/03/07 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
Python实现HTTP协议下的文件下载方法总结
2016/04/20 Python
通过Pandas读取大文件的实例
2018/06/07 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
Python更新所有已安装包的操作
2020/02/13 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
篝火晚会主持词
2014/03/25 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python