PHP 读取大文件的X行到Y行内容的实现代码


Posted in PHP onJune 24, 2013

需要读取一个文件的几行内容,但是文件比较大,所以研究了下php读取大文件的几行内容的方法,写了一个方法,代码如下(加了注释):
缓存文件如果能够保存在一行, 而利用算法读取指定的行数, 自然会比全部读出来挑选要快得多. 但php似乎这方面比较弱, 不太好操作. 就算使用SplFileObject仍然不是特别可取, 内存压力存在.

$fp->seek($startLine - 1);

经过测试, 此行代码在8MB文本中游走到最后一行, 内存占用为49KB, 还算不错. 换成fopen方式用fgets跳过的模式, 则花费29KB的内存, fopen还是占优势.

function getFileLines($filename, $startLine = 1, $endLine = 50, $method = 'rb'){ 
$content = array(); if (version_compare(PHP_VERSION, '5.1.0', '>=')) { // 判断php版本(因为要用到SplFileObject,PHP>=5.1.0) 
$count = $endLine - $startLine; 
$fp = new SplFileObject($filename, $method); 
$fp->seek($startLine - 1); // 转到第N行, seek方法参数从0开始计数 
for ($i = 0; $i <= $count; ++$i) { 
$content[] = $fp->current(); // current()获取当前行内容 
$fp->next(); // 下一行 
} 
} else { //PHP<5.1 
$fp = fopen($filename, $method); 
if (!$fp) 
return 'error:can not read file'; 
for ($i = 1; $i < $startLine; ++$i) { // 跳过前$startLine行 
fgets($fp); 
} 
for ($i; $i <= $endLine; ++$i) { 
$content[] = fgets($fp); // 读取文件行内容 
} 
fclose($fp); 
} 
return array_filter($content); // array_filter过滤:false,null,'' 
}

效果不错, SplFileObject类功能比较好.

PHP 相关文章推荐
php开发工具之vs2005图解
Jan 12 PHP
php 设计模式之 单例模式
Dec 19 PHP
php中利用post传递字符串重定向的实现代码
Apr 21 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
CI框架中zip类应用示例
Jun 17 PHP
php include类文件超时问题处理
Feb 06 PHP
php通过排列组合实现1到9数字相加都等于20的方法
Aug 03 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
Jul 04 PHP
Laravel实现短信注册的示例代码
May 29 PHP
Laravel框架创建路由的方法详解
Sep 04 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
Aug 06 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 #PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 #PHP
解析Ubuntu下crontab命令的用法
Jun 24 #PHP
关于crontab的使用详解
Jun 24 #PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 #PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 #PHP
解析argc argv在php中的应用
Jun 24 #PHP
You might like
php中对2个数组相加的函数
2011/06/24 PHP
php对数组排序的简单实例
2013/12/25 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
PHP5.3新特性小结
2016/02/14 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
vue封装swiper代码实例解析
2019/10/08 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
详解Python文件修改的两种方式
2019/08/22 Python
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
财务会计专业毕业生自荐信
2013/10/19 职场文书
函授本科自我鉴定
2013/11/03 职场文书
公司股东合作协议书
2014/09/14 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
委托书的样本
2015/01/28 职场文书
商场广播稿范文
2015/08/19 职场文书
投资入股协议书
2016/03/22 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android