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 08 PHP
8个出色的WordPress SEO插件收集
Feb 26 PHP
php懒人函数 自动添加数据
Jun 28 PHP
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
ThinkPHP中处理表单中的注意事项
Nov 22 PHP
php删除左端与右端空格的方法
Nov 29 PHP
thinkphp 验证码 的使用小结
May 07 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
Oct 20 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
DC动漫人物排行
2020/03/03 欧美动漫
PHP生成静态HTML文档实现代码
2016/06/23 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
用JavaScript隐藏控件的方法
2009/09/21 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
基于Python函数和变量名解析
2019/07/19 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
使用python实现kNN分类算法
2019/10/16 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
2020/04/16 Python
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
大学生专科学习生活的自我评价
2013/12/07 职场文书
乡镇党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript