PHP检查脚本/函数是否正在运行

时间:2013-01-05 07:17:07

标签: php

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

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

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

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

非常感谢

3 个答案:

答案 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();
 }
}