0

500〜600 MBのファイル全体を読み取ることはできません。データがメモリにロードされているため、コストがかかりすぎます。

ファイルcfile_get_content'om制限行を読み取りました(1000行を条件とします)。その後、特定の行を削除するとどうすればよいですか。$f=ファイルを使用せずに。

続きを読む:私は非常に大きなファイルを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 に答える