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 相关文章推荐
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 PHP
社区(php&amp;&amp;mysql)二
Oct 09 PHP
php中取得URL的根域名的代码
Mar 23 PHP
Zend Framework分发器用法示例
Dec 11 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
May 08 PHP
Joomla框架实现字符串截取的方法示例
Jul 18 PHP
PHP中递归的实现实例详解
Nov 14 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
Apr 16 PHP
安装docker和docker-compose实例详解
Jul 30 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
Sep 27 PHP
php使用event扩展的io复用测试的示例
Oct 20 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
PHP4实际应用经验篇(9)
2006/10/09 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
JavaScript 对象模型 执行模型
2009/12/06 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
[44:22]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第一场 11.01
2020/11/02 DOTA
python根据出生日期返回年龄的方法
2015/03/26 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
python将视频转换为全字符视频
2019/04/26 Python
python实现超市商品销售管理系统
2019/10/25 Python
Python换行与不换行的输出实例
2020/02/19 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
python 实现客户端与服务端的通信
2020/12/23 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
应聘教师自荐信
2013/10/12 职场文书
农村婚礼证婚词
2014/01/08 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
法定代表人授权委托书
2014/04/04 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
高考升学宴主持词
2019/06/21 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
浅谈python数据类型及其操作
2021/05/25 Python
Python爬取某拍短视频
2021/06/11 Python
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang