PHP是否有办法在允许函数再次运行之前检查函数是否已完成处理?
我有一个函数,在页面加载/重新加载/计时器事件检查,如果数据库项目应该根据结束日期(日期少于现在)过期,如果日期小于现在,则复制具有确切的记录相同的信息,但在结束日期增加了10天。然后,该脚本将原始记录状态设置为非活动状态。这是在数据库中保留项目的原始副本所必需的,并且每个记录都会继续该过程。
有时,脚本会创建同一项的多个副本,因此看起来脚本没有足够快地将状态设置为非活动状态,并且当重新加载/访问页面时,会运行另一个脚本实例来生成另一个重复记录。
那么有没有办法检查一个函数当前是否正在运行,如果是,那么忽略新调用只运行一个实例?
非常感谢
答案 0 :(得分:3)
听起来你需要一个“互斥体”。您可以try using this,或者通过创建共享资源自己实现一个,例如将空文件写入磁盘然后检查其存在,并在完成后将其删除。
针对您的特定问题的更好解决方案是设置一个cron作业来定期运行数据库维护脚本,而不是依赖于对页面的随机用户请求。这将确保它不会经常运行并减少每个请求的处理。
答案 1 :(得分:0)
对于PHP:
$Running = false;
function functionName() {
if (!$Running) {
$Running= true;
//Your logic implementation here
$Running= false;
}
}
你也可以对jQuery函数使用相同的原则,也可以使用cron job。
答案 2 :(得分:0)
使用try
function blah() {
try {
}
catch(Exception $e) {
echo 'Message: ' .$e->getMessage();
}
}