【问题标题】:How can I create a non-file lock in PHP?如何在 PHP 中创建非文件锁?
【发布时间】:2010-08-10 05:52:20
【问题描述】:

我在 PHP 中有一个维护脚本,用于更新和修复数据库。理论上,同时运行两个脚本应该不成问题,但我想通过在 PHP 中的变量中加锁来更加安全。当然,问题是我不能将它存储在 $_SESSION 变量中,因为会话只适用于一个用户。

有什么方法可以将此锁存储在变量中?我宁愿不创建和删除文件,以防服务器在脚本中间死机。

【问题讨论】:

    标签: php locking


    【解决方案1】:

    由于您正在使用数据库,因此您可以在脚本运行时lock the tables 您需要。这将确保独占数据库访问。

    【讨论】:

      【解决方案2】:

      MySQL 有GET_LOCK() 函数。

      【讨论】:

        【解决方案3】:

        有什么办法可以将此锁存储在变量中?

        变量是当前 php 实例的本地变量 - 因此它比将其保留在会话中更糟糕。

        我宁愿不创建和删除文件,以防服务器在脚本中间死机。

        它可能仍然是放置它的最佳位置。如果修复脚本未完成,那么您可能需要介入并手动确保数据一致 - 您还应该在操作开始和成功完成之间阻止对资源的所有其他访问。

        如果它从命令提示符运行,那么你可以搜索进程列表:

        $cmd=$argv[0];
        $pid=getmypid();
        $find="ps -ef | grep $cmd | grep -v grep | grep -v $pid";
        $others=`$find`;
        

        但这仍然存在上一次尝试失败和数据损坏的风险。

        C.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-29
          • 1970-01-01
          • 1970-01-01
          • 2013-06-25
          • 1970-01-01
          • 2013-11-22
          • 1970-01-01
          • 2015-08-13
          相关资源
          最近更新 更多