是否有一种有效的方法可以替换文件中的最后一行?
我需要这个日志文件,才能拥有这种行:
21:00:00 - 信息 - 数量:3
替换为:
21:00:35 - 信息 - 数量:4
等等..所以它在尾巴-f
看起来很酷问题是日志文件可能变得非常大,我不希望每次我想要替换最后一行时将它们加载到内存中。
无论如何,如果加载整个文件是唯一的方法,你会怎么做呢,记住还有其他脚本同时将数据附加到同一个文件?我想我必须把它锁起来。我从未使用过它,因为我只使用带有FILE_APPEND选项的file_put_contents。
答案 0 :(得分:1)
如果您想要高效方式,请从最后读取一个内容块,然后截断最后找到的\n
。这不是很好,但有效:
$fn = "LICENSE";
$size = filesize($fn);
$block = 4096;
$trunc = max($size - $block, 0);
$f = fopen($fn, "c+");
if (flock($f, LOCK_EX)) {
fseek($f, $trunc);
$bin = rtrim(fread($f, $block), "\n");
if ($r = strrpos($bin, "\n")) {
ftruncate($f, $trunc + $r + 1);
}
}
fclose($f); // clears LOCK_EX