如何从大(大)文件中删除最后N行

时间:2012-11-28 09:57:01

标签: php linux

读取500-600 MB的整个文件我不能,因为数据被加载到内存中,对我来说太贵了。

我读取了文件c file_get_content'om限制行(以1000行为条件)。之后我怎么说删除特定的行。不使用$ f = file。

阅读更多:我读了一个非常大的文件到1000行(前1000行),在它们的处理过程中,根据条件,你要删除的任何行,有些都要离开。

我可以将结果写在临时文件中,如果脚本停止或其他内容,但没有回滚。

1 个答案:

答案 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);