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 上传文件类型判断函数(避免上传漏洞 )
Jun 08 PHP
Base64在线编码解码实现代码 演示与下载
Jan 08 PHP
PHP小教程之实现链表
Jun 09 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
php实现singleton()单例模式实例
Nov 06 PHP
支持png透明图片的php生成缩略图类分享
Feb 08 PHP
php截取指定2个字符之间字符串的方法
Apr 15 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
Oct 11 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
Oct 15 PHP
PHP基于ip2long实现IP转换整形
Dec 11 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验证码函数代码(简单实用)
2013/09/29 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
yii2安装详细流程
2018/05/23 PHP
JS控制表格隔行变色
2006/06/26 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
详解Python字符串对象的实现
2015/12/24 Python
Python编码爬坑指南(必看)
2016/06/10 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
python中实现k-means聚类算法详解
2017/11/11 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
python实现AES加密和解密
2019/03/27 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
TCP/IP的分层模型
2013/10/27 面试题
项目建议书怎么写
2014/05/15 职场文书
万里长城导游词
2015/01/30 职场文书
python多次执行绘制条形图
2022/04/20 Python