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魔术方法与魔术变量、内置方法与内置变量的深入分析
Jun 03 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
php编写简单的文章发布程序
Jun 18 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
PHP 实现的将图片转换为TXT
Oct 21 PHP
WordPress主题制作之模板文件的引入方法
Dec 28 PHP
php实现中文转数字
Feb 18 PHP
ThinkPHP中limit()使用方法详解
Apr 19 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
php实现批量修改文件名称的方法
Jul 23 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
php pdo连接数据库操作示例
Nov 18 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 include加载文件两种方式效率比较
2010/08/08 PHP
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
详解php命令注入攻击
2019/04/06 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
初识Node.js
2014/09/03 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
laypage.js分页插件使用方法详解
2019/07/27 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
python使用生成器实现可迭代对象
2018/03/20 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
python统计字符的个数代码实例
2020/02/07 Python
python变量的作用域是什么
2020/05/26 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
HTML5新标签兼容——&gt; 的两种方法
2018/09/12 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
应届生程序员求职信
2013/11/05 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
锦旗赠语
2015/06/23 职场文书
2019通用版导游词范本!
2019/08/07 职场文书