巨大なログファイル(約1,000,000行)があります。最後の行を取得し、PHPを使用してファイルから削除したいと思います。そうするための最も速い方法は何ですか?
私は試した:
$logfile = escapeshellarg("/path/to/logfile");
$lastline = `tail -n 1 "$logfile"`; // obtained the last line
上記のアプローチは十分に効率的ですか?そして、ファイルから最後の行を削除する方法は?
以下のジョンの答えから、ここにコードがあります:
$buffer_size = 1000;
$fh = fopen("/path/to/logfile", "r+");
fseek($fh, -$buffer_size, SEEK_END);
$content = fgets($fh, 100);
while(strrpos($content, PHP_EOL) != false) {
fseek($fh, -$buffer_size); // move backward for extra -1000
$content = fgets($fh, $buffer_size);
}
$pos_last_eol = strrpos($content, PHP_EOL);
fseek($fh, $pos_last_eol); // seek to that position
ftruncate($fh, ftell($fh));
fclose($fh);