前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP对大文件进行读取切割拆分

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

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

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

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

<?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 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档