【发布时间】:2012-08-29 09:59:14
【问题描述】:
我有一个巨大的日志文件(大约 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);
【问题讨论】:
-
我相信这是使用 shell 的正确方法,只需确保转义输入以避免命令行注入
-
同意。我添加了
escapeshellarg()。但是如何有效地从文件中删除最后一行? -
出于好奇:为什么需要在 PHP 中这样做?为什么你不能在 shell 中做呢?
-
我们需要处理网页中的日志。当然PHP也可以调用shell脚本。
标签: php