【问题标题】:Possible file_put_contents conflict? [duplicate]可能的 file_put_contents 冲突? [复制]
【发布时间】:2021-06-08 01:19:34
【问题描述】:

我发布的不是代码错误,而是使用这段代码可能发生的冲突:

$logFile = 'data.log';
$result = (int) file_get_contents($logFile) + 1;
file_put_contents($logFile, $result);  

这将读取一个名为 data.log 的文件并获取它的编号并将该编号写入 +1。但是,我将在许多用户实时调用它的情况下运行这个应用程序(比如每秒 100 个用户)。

所以,我想知道这是否会造成一些冲突,获取更新的号码并存储错误的数据或类似的东西。可能吗?有什么办法可以避免吗?

谢谢。

【问题讨论】:

    标签: php


    【解决方案1】:

    它不能正常工作,因为数据没有“原子地”改变。

    您可以通过在访问文件之前锁定文件来解决它 - 请阅读flock 函数。但这可能会影响性能并可能严重限制您的吞吐量 - 因此您应该对其进行基准测试。

    一般来说,这不被认为是实现计数器的“好”方式。考虑使用适当的数据库(如 MySQL)或 NoSQL(如 MongoDB)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2019-06-18
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      相关资源
      最近更新 更多