PHP生成器应用,读取超大文件
PHP开发很多时候都要读取大文件,比如csv文件、text文件,或者一些日志文件。这些文件如果很大,比如几个G。这时,直接一次性把所有的内容读取到内存中计算不太现实。
使用生成器读取文件,可以第一次读取了第一行,第二次读取了第二行,以此类推,每次被加载到内存中的文字只有一行,可以大大的减小了内存的使用。
header("content-type:text/html;charset=utf-8");
function getLines($file) {
$f = fopen($file, 'r');
try {
while ($line = fgets($f)) {
yield $line;
}
} finally {
fclose($f);
}
}
foreach (getLines("sgland.log") as $n => $line) {
//逐行内容
echo $line . "</br>";
//行数
// var_dump($n);
}