我在PHP中有一个维护脚本来更新和修复数据库。从理论上讲,同时运行两个脚本不应该是一个问题,但我希望通过在PHP中的变量中锁定来实现更加安全。当然,问题在于我无法将其存储在$_SESSION
变量中,因为会话仅适用于一个用户。
有什么方法可以将这个锁存储在一个变量中?如果服务器在脚本中间死亡,我宁愿不创建和删除文件。
答案 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`;
但这仍然存在以前尝试失败并且数据损坏的风险。
℃。