【发布时间】:2025-12-01 10:25:02
【问题描述】:
我有一个用 PHP 编写的简单记录器类。它写入的文件应该有一个最大大小。我知道我可以使用ftruncate($filename, $size) 截断文件,但这会在最后删除内容。所以我想做的是:
if(filesize($filename) > $mySize) {
//remove X bytes at BEGINNING of $filename
}
// append log message
$handle = fopen($filename, 'a+');
if($handle !== false) {
fwrite($handle, $myMessage);
fclose($handle);
}
这样日志会随着时间“滚动”文件,而不是无限增长(最终崩溃为 2GB,这是 PHP 的signed int 限制)。
在不必担心性能的情况下删除文件开头的最佳方法是什么?我假设将文件逐行读取到另一个缓存文件中很慢,尤其是在日志记录经常发生的情况下。有没有更好的办法?
【问题讨论】:
标签: php file logging filesize truncate