2013-01-05 96 views
0

有没有办法在PHP中检查一个函数是否已经完成处理,然后再允许它再次运行?PHP检查脚本/函数是否正在运行

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

有时脚本会创建同一个项目的多个副本,所以看起来好像脚本没有将状态设置为非活动状态足够快并且页面被重新加载/访问等脚本的另一个实例正在运行,从而产生另一个重复记录。

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

很多很多谢谢

+0

只需在功能末尾设置一个标志 –

+0

@ Mr.Alien:无法工作,它们是单独的过程。 – mpen

回答

3

听起来像你需要一个“互斥体”。您可以通过创建一个共享资源(如将空文件写入磁盘然后检查其是否存在以及在完成时将其删除)来自行实施。

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

+0

谢谢你。不幸的是,我不能只是有一个cron的工作,因为这个网站是一个拍卖网站,在这个网站上,项目需要更新和过期。我会看看互斥体,但听起来像一个不错的选择 – puks1978

+0

嗨,我一直在试图找到一些关于如何使用互斥体的例子,但无法找到任何显示完整的代码,所以我有点困惑如何实现这一点。你有任何示例说明如何做到这一点?谢谢 – puks1978

+0

请问一个mysql选择更新是否达到相同的结果? – puks1978

0

对于PHP:

$Running = false; 

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

     //Your logic implementation here 

     $Running= false; 
    } 
    } 

您可以使用同样的原理jQuery的功能也和cron作业太多。