读取 500-600 MB 的整个文件我不能,因为数据被加载到内存中,对我来说太贵了。
我阅读了文件 c file_get_content'om 限制行(以 1000 行为条件)。在那之后我怎么能说删除特定的行。不使用$f=file。
阅读更多:我将一个非常大的文件读取到 1000 行(前 1000 行),在其处理它们时,根据条件,您想要删除的任何行,以及一些离开。
我可以将结果写入临时文件,如果脚本停止或其他原因,但没有回滚。
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);