近期在对项目日志进行分析时,发现日志文件较大,里面的文件行数也较多,使用编辑器进行打开或使用分析工具打开时较慢,于是将其拆分成多个小文件,便于对其进行分析、查看。
测试时将一份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);
}
}
?>
设置了一些基础的参数,如文件后缀,单文件储存量,默认存储位置等,便于大家进行更改,主要是使用了生成器,在对大文件进行读取时,占用内存很少,是一个很好的方法。