首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PHP对大文件进行读取切割拆分

PHP对大文件进行读取切割拆分

作者头像
申霖
发布于 2019-12-27 18:08:01
发布于 2019-12-27 18:08:01
2.8K0
举报
文章被收录于专栏:小白程序猿小白程序猿

近期在对项目日志进行分析时,发现日志文件较大,里面的文件行数也较多,使用编辑器进行打开或使用分析工具打开时较慢,于是将其拆分成多个小文件,便于对其进行分析、查看。

测试时将一份10000多行的文本文件进行了拆分,按照每一份文件5000行为基础,大约 消耗了4秒的时间,就成功的对文件进行了拆分。下面是实例代码:

代码语言:javascript
复制
<?php

$suffix   = '.txt';//保存文件后缀
$i        = $start = 0; //起始量
$num      = 5000; //单文件存储量
$path     = './txt/cutting/'; //默认存储文件位置
$filePath = './txt/20191025/7088479afbb763371bc0e28b33d16bc5.txt'; //切割文件位置
// 使用
$glob = $this->read_file($filePath);
while($glob->valid()) {
    // 当前行文本
    $line = $glob->current();
    // 逐行处理数据进行存储
    if($i % $num == 0) {
        //创建新的文件
        $start++;
    }
    //写入文件
    $file = fopen($path . 'cutting_' . $start . $suffix, "a");
    fwrite($file, $line . "\n");
    $i++;
    // 指向下一个,不能少
    $glob->next();
}
echo "共计" . $i . "行";

//文件读取
function read_file($path)
{
    if($handle = fopen($path, 'r')) {
        while(!feof($handle)) {
            yield trim(fgets($handle));
        }
        fclose($handle);
    }
}

?>

设置了一些基础的参数,如文件后缀,单文件储存量,默认存储位置等,便于大家进行更改,主要是使用了生成器,在对大文件进行读取时,占用内存很少,是一个很好的方法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档