PHP 在 5.5 版本中引入了「生成器(Generator)」特性,不过这个特性并没有引起人们的注意。正好最近有读取大文件的需求,大概有14GB左右。
<?php
function getLines($file) {
$f = fopen($file, 'r');
try {
while ($line = fgets($f)) {
yield $line;
}
} finally {
fclose($f);
}
}
foreach (getLines("logs.log") as $n => $line) {
//逐行内容
echo $line;
//行数
var_dump($n);
}
每行字符30个左右纯文本文件,完全读取一遍:
- 在我的台式机
Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz 2.81 GHz
(6核)CPU 20% 左右,耗时122s - 在小服务器
Intel Xeon Processor (Cascadelake)
(1核)CPU 100% 左右,耗时397s
查询还在接受范围内。
参考:https://www.jianshu.com/p/2751e5d7b259