0

PHP中有没有办法在允许函数再次运行之前检查函数是否已完成处理?

我有一个功能,在页面加载/重新加载/计时器事件上检查数据库项目是否应该根据结束日期(日期小于现在)过期,如果日期小于现在,则使用完全相同的信息复制记录但结束日期增加 10 天。然后脚本将原始记录状态设置为非活动状态。这是在数据库中保留项目的原始副本所必需的,并且对于每条记录都将继续该过程。

有时脚本会创建同一项目的多个副本,因此脚本似乎没有足够快地将状态设置为非活动状态,并且当页面重新加载/访问等时,脚本的另一个实例正在运行,产生另一个重复记录。

那么有没有办法检查一个函数当前是否正在运行,如果是,则忽略新的调用,只运行一个实例?

非常感谢

4

3 回答 3

3

听起来你需要一个“互斥锁”。您可以尝试使用它,或者通过创建共享资源自己实现一个,例如将一个空文件写入磁盘,然后检查其是否存在,并在完成后将其删除。

但是,对于您的特定问题,更好的解决方案是设置一个 cron 作业来定期运行您的数据库维护脚本,而不是依赖于对您的页面的随机用户请求。这将确保它不会运行太频繁并减少每个请求的处理。

于 2013-01-05T07:24:40.417 回答
0

对于 PHP:

 $Running = false;

   function functionName() {
    if (!$Running) {
        $Running= true;

        //Your logic implementation here

        $Running= false;
     }
  }

您也可以对 jQuery 函数和 cron 作业使用相同的原理。

于 2016-03-15T05:51:18.003 回答
0

使用 try catch

function blah() {
 try {
 }
 catch(Exception $e) {
  echo 'Message: ' .$e->getMessage();
 }
}
于 2018-07-25T01:07:49.950 回答