返回首页 - Notes - 2018

PHP 使用 yield 读取超大文件


如果要读取超大文件,一次性读进内存肯定是不行的,而用生成器(yield)则可以完美解决内存爆表的问题

<?php

function read_very_big_file($file)
{
    $handle = fopen($file, 'rb');

    while (feof($handle) === false) {
        yield fgets($handle);
    }

    fclose($handle);
}

$file = __DIR__.'/very_big_file.data';
foreach (read_very_big_file($file) as $line) {
    // To do some thing ...
    echo $line.PHP_EOL;
}

date:2018-09-13