一般情况下读取文件内容使用file_get_content(),但是若文件非常大的情况下使用此函数读取的话会导致内存溢出问题。
利用yield
语法特性:
/**
* 逐行读取文件内容
* @param string $filePath
* @return Generator
*/
function readFileLineByLine(string $filePath)
{
$open = fopen($filePath, 'r');
while (!feof($open)) {
yield fgets($open);
}
fclose($open);
}
该函数返回的是一个生成器,遍历该生成器即可依次获取每一行内容
注意读取的内容包含换行符,可使用
str_replace()
去除换行符
/**
* 逐行读取文件内容
* @param string $filePath
* @return Generator
*/
function readFileLineByLine(string $filePath)
{
$open = fopen($filePath, 'r');
while (!feof($open)) {
yield str_replace(PHP_EOL, '', fgets($open));
}
fclose($open);
}