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);
}

标签: php

添加新评论