【发布时间】:2010-08-10 05:52:20
【问题描述】:
我在 PHP 中有一个维护脚本,用于更新和修复数据库。理论上,同时运行两个脚本应该不成问题,但我想通过在 PHP 中的变量中加锁来更加安全。当然,问题是我不能将它存储在 $_SESSION 变量中,因为会话只适用于一个用户。
有什么方法可以将此锁存储在变量中?我宁愿不创建和删除文件,以防服务器在脚本中间死机。
【问题讨论】:
我在 PHP 中有一个维护脚本,用于更新和修复数据库。理论上,同时运行两个脚本应该不成问题,但我想通过在 PHP 中的变量中加锁来更加安全。当然,问题是我不能将它存储在 $_SESSION 变量中,因为会话只适用于一个用户。
有什么方法可以将此锁存储在变量中?我宁愿不创建和删除文件,以防服务器在脚本中间死机。
【问题讨论】:
由于您正在使用数据库,因此您可以在脚本运行时lock the tables 您需要。这将确保独占数据库访问。
【讨论】:
MySQL 有GET_LOCK() 函数。
【讨论】:
有什么办法可以将此锁存储在变量中?
变量是当前 php 实例的本地变量 - 因此它比将其保留在会话中更糟糕。
我宁愿不创建和删除文件,以防服务器在脚本中间死机。
它可能仍然是放置它的最佳位置。如果修复脚本未完成,那么您可能需要介入并手动确保数据一致 - 您还应该在操作开始和成功完成之间阻止对资源的所有其他访问。
如果它从命令提示符运行,那么你可以搜索进程列表:
$cmd=$argv[0];
$pid=getmypid();
$find="ps -ef | grep $cmd | grep -v grep | grep -v $pid";
$others=`$find`;
但这仍然存在上一次尝试失败和数据损坏的风险。
C.
【讨论】: