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水印
Mar 16 PHP
解析php php_openssl.dll的作用
Jul 01 PHP
php发送get、post请求的6种方法简明总结
Jul 08 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
php遍历目录方法小结
Mar 10 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
May 13 PHP
php使用gzip压缩传输js和css文件的方法
Jul 29 PHP
php提高网站效率的技巧
Sep 29 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
Jan 05 PHP
php生成酷炫的四个字符验证码
Apr 22 PHP
php设计模式之装饰模式应用案例详解
Jun 17 PHP
laravel 实现设置时区的简单方法
Oct 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
PHPCMS的使用小结
2010/09/20 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
javascript常用函数(2)
2015/11/05 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
jQuery接受后台传递的List的实例详解
2017/08/02 jQuery
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
Python基于百度AI的文字识别的示例
2018/04/21 Python
安装python及pycharm的教程图解
2019/10/10 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
python re的findall和finditer的区别详解
2020/11/15 Python
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
关于保护环境的建议书
2014/05/13 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
职业规划实施方案
2014/06/10 职场文书
高三霸气励志标语
2014/06/24 职场文书
加入学生会自荐书
2015/03/05 职场文书
身份证丢失证明
2015/06/19 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
python flappy bird小游戏分步实现流程
2022/02/15 Python