0

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

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

阅读更多:我将一个非常大的文件读取到 1000 行(前 1000 行),在其处理它们时,根据条件,您想要删除的任何行,以及一些离开。

我可以将结果写入临时文件,如果脚本停止或其他原因,但没有回滚。

4

1 回答 1

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);
于 2012-11-28T10:05:57.157 回答