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 06 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 PHP
php文件上传表单摘自drupal的代码
Feb 15 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
php中将字符串转为HTML的实体引用的一个类
Feb 03 PHP
php将mysql数据库整库导出生成sql文件的具体实现
Jan 08 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
Sep 11 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
Dec 08 PHP
php json_encode与json_decode详解及实例
Dec 13 PHP
PHP封装的PDO数据库操作类实例
Jun 21 PHP
PHP ADODB生成下拉列表框功能示例
May 29 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
中国的第一台收音机
2021/03/01 无线电
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
Python 在字符串中加入变量的实例讲解
2018/05/02 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
Django组件cookie与session的具体使用
2019/06/05 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
django 实现简单的插入视频
2020/04/07 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
影视制作岗位职责
2013/12/04 职场文书
2014年幼儿园元旦活动方案
2014/02/13 职场文书
爱心活动计划书
2014/04/26 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
留学推荐信(中英文版)
2015/03/26 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
Python异常类型以及处理方法汇总
2021/06/05 Python
Hive HQL支持2种查询语句风格
2022/06/25 数据库