带有fopen的PHP锁定函数似乎失败了

时间:2017-12-19 10:10:01

标签: php locking

我写了一个锁定功能来保护功能不会同时运行。但是我觉得这个功能效果不好,并且在几秒钟内启动时功能可能会同时运行。

我的锁定功能:

function lockFunction($function){
    $lock = SERVER_ROOT.'/lock/'.$function.'.lock';
    $f = @fopen($lock, 'x');
    if($f === false){
        # Lockfile exists, script is running
        return false;
    }else{
        # Script is not running, now locked
        fclose($f);
        return true;
    }
}

当功能完成后,我解锁功能

function unlockFunction($function){
  @unlink(SERVER_ROOT.'/lock/'.$function.'.lock');
}

我如何使用该功能:

的script.php

if(lockFunction('functiontolock')){
    # Run code that may not be run simultaneously

    # sleep just as example of runtime.
    sleep(10);    

    unlockFunction('functiontolock');
}

如果script.php在例如{{1}}内运行两次,是否会导致问题2秒。

注意 运行此服务器的服务器使用群集技术,这意味着文件位于文件服务器上,数据库位于不同的服务器上等。文件通过网络访问。不知道它会减慢这个功能。

0 个答案:

没有答案