php - 如何可靠地生成连续数字?

标签 php symfony

我正在开发一个项目(使用 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/

相关文章:

php - 如何编辑巨大的 SQL 转储?

php - 在每个环境的 Symfony 中禁用 swiftmailer 假脱机

php - Symfony2 窗体文件夹

php - Doctrine,@oneToMany,但只有激活字段

javascript - 从重复循环中的php表单获取变量

php - 模型中 1 个函数中的多个 MySQL 查询

php - 此选择更新是否需要回滚(不返回行)?

javascript - 将参数从 twig 传递到 Angular

php - symfony 子查询中出现错误

php - 如何使用脚本将保存在服务器上的 .wav 和 .webm 转换为 .mp4 并将其保存在服务器上