读取500-600 MB的整个文件我不能,因为数据被加载到内存中,对我来说太贵了。
我读取了文件c file_get_content'om限制行(以1000行为条件)。之后我怎么说删除特定的行。不使用$ f = file。
阅读更多:我读了一个非常大的文件到1000行(前1000行),在它们的处理过程中,根据条件,你要删除的任何行,有些都要离开。
我可以将结果写在临时文件中,如果脚本停止或其他内容,但没有回滚。
答案 0 :(得分:3)
Php具有ftruncate功能。
编辑:提供完整的解决方案。
$f = fopen($filename, 'r+');
$linepos = array_fill(0, $N + 1, 0);
$i = 0;
while (! feof($f)) {
$line = fgets($f);
if ($line !== FALSE) {
$j = ($i + 1) % ($N + 1);
$linepos[$j] = $linepos[$i] + strlen($line);
$i = $j;
}
}
ftruncate($f, $linepos[($i + 1) % ($N + 1)]);
fclose($f);