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 相关文章推荐
SMARTY学习手记
Jan 04 PHP
火车头采集器3.0采集图文教程
Mar 17 PHP
基于PHP创建Cookie数组的详解
Jul 03 PHP
PHP四舍五入精确小数位及取整
Jan 14 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
php判断访问IP的方法
Jun 19 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
Jul 06 PHP
总结对比php中的多种序列化
Aug 28 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
php模拟实现斗地主发牌
Apr 22 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
第三节 定义一个类 [3]
2006/10/09 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
2017/09/19 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
浅谈python标准库--functools.partial
2019/03/13 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
python安装后的目录在哪里
2020/06/21 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
python解包概念及实例
2021/02/17 Python
耐克中国官方商城:Nike中国
2018/10/18 全球购物
软件测试英文面试题
2012/10/14 面试题
财务经理岗位职责
2013/11/09 职场文书
留学推荐信写作指南
2014/01/25 职场文书
师范类求职信
2014/06/21 职场文书
师德师风的心得体会
2014/09/02 职场文书
幼师辞职信怎么写
2015/02/27 职场文书
让世界充满爱观后感
2015/06/10 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
python库sklearn常用操作
2021/08/23 Python