我有一個巨大的日誌文件(大約1,000,000行)。我想獲得最後一行,並使用PHP從文件中刪除它。最快的方法是什麼?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);
我相信這是使用shell的正確方法,只需確保轉義輸入以避免命令行注入 – mkk
同意。我加了'escapeshellarg()'。但如何有效地從文件中刪除最後一行?出於好奇: – Raptor
爲什麼你需要在PHP中做到這一點?爲什麼你不能在殼裏做? – Gordon