如何在PHP中创建非文件锁?

时间:2010-08-10 05:52:20

标签: php locking

我在PHP中有一个维护脚本来更新和修复数据库。从理论上讲,同时运行两个脚本不应该是一个问题,但我希望通过在PHP中的变量中锁定来实现更加安全。当然,问题在于我无法将其存储在$_SESSION变量中,因为会话仅适用于一个用户。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

MySQL具有GET_LOCK()功能。

答案 2 :(得分:0)

  

我有什么方法可以将这个锁存储在变量中吗?

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

  

如果服务器在脚本中间死亡,我宁愿不创建和删除文件。

它仍然可能是最好的地方。如果修复脚本没有完成,那么您可能想要介入并手动确保数据是一致的 - 您还应该在操作开始和成功完成时阻止对资源的所有其他访问。

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

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

但这仍然存在以前尝试失败并且数据损坏的风险。

℃。