我正在开发一个项目(使用 Symfony 2 以 PHP 编写的 Web 应用程序),其中需要记录各种安全相关事件。还要求日志文件中的事件连续编号(我猜这样删除项目就不那么容易了)。
我将使用Monolog (包含在 Symfony 中)用于日志记录,我知道我可以使用处理器将数字添加到记录中。
但是我不知道如何真正可靠地生成连续的数字。我所说的“可靠”是指:没有间隙,也没有重复的数字。
我能想到的唯一解决方案是让数据库(通过 Doctrine 的 MySQL)通过使用具有自动增量 ID 的虚拟表来生成数字,但这似乎是日志记录的一点开销。
还有哪些其他策略?
最佳答案
您可以使用包含最后一个 id 的单个文件来模拟自动递增 id。锁可以防止竞争条件:
$fp = fopen('/path/to/id.file', 'r+');
flock($fp, LOCK_EX);
$lastId = fgets($fp);
$currentId = $lastId + 1;
fseek($fp, 0);
fputs($currentId);
// place logging here...
flock($fp, LOCK_UN);
关于php - 如何可靠地生成连续数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15565865/