找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1284|回复: 0
打印 上一主题 下一主题

PHP 读取大文件的X行到Y行内容的实现代码

[复制链接]

2560

主题

2560

帖子

7622

积分

论坛元老

Rank: 8Rank: 8

积分
7622
跳转到指定楼层
楼主
发表于 2018-2-14 08:16:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            需要读取一个文件的几行内容,但是文件比较大,所以研究了下php读取大文件的几行内容的方法,写了一个方法,代码如下(加了注释):
缓存文件如果能够保存在一行, 而利用算法读取指定的行数, 自然会比全部读出来挑选要快得多. 但php似乎这方面比较弱, 不太好操作. 就算使用SplFileObject仍然不是特别可取, 内存压力存在.
[U]复制代码[/U] 代码如下:
$fp->seek($startLine - 1);

经过测试, 此行代码在8MB文本中游走到最后一行, 内存占用为49KB, 还算不错. 换成fopen方式用fgets跳过的模式, 则花费29KB的内存, fopen还是占优势.
[U]复制代码[/U] 代码如下:
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 current(); // current()获取当前行内容
$fp->next(); // 下一行
}
} else { //PHP
效果不错, SplFileObject类功能比较好.
            
            
您可能感兴趣的文章:
  • php对大文件进行读取操作的实现代码
  • php读取大文件示例分享(文件操作类)
  • php实现读取超大文件的方法
  • PHP读取大文件的多种方法介绍
  • PHP读取大文件末尾N行的高效方法推荐
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端