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抽象工厂模式(Elgg)
Mar 21 PHP
深入php list()函数的详解
Jun 05 PHP
浅析php header 跳转
Jun 17 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
ThinkPHP 表单自动验证运用示例
Oct 13 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
php导出生成word的方法
Dec 25 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
php判断是否为ajax请求的方法
Nov 29 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 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的session功能评述(二)
2006/10/09 PHP
用php和MySql来与ODBC数据连接
2006/10/09 PHP
php self,$this,const,static,-&amp;gt;的使用
2009/10/22 PHP
PHP 图片处理
2020/09/16 PHP
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
python实现批量监控网站
2016/09/09 Python
python删除字符串中指定字符的方法
2018/08/13 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
python 实现多线程下载视频的代码
2019/11/15 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
运动会邀请函范文
2014/02/06 职场文书
高中军训感言800字
2014/03/05 职场文书
浪漫婚礼主持词
2014/03/14 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
模范教师材料大全
2014/12/16 职场文书
安装工程师岗位职责
2015/02/13 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
2015年教研工作总结
2015/05/23 职场文书
行政处罚告知书
2015/07/01 职场文书
领导新年致辞2016
2015/07/29 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书