Php flock()是否仅适用于当前方法?

Php flock()是否仅适用于当前方法?,php,methods,file-locking,flock,Php,Methods,File Locking,Flock,flock()函数是否仅在与代码执行相同的方法中使用时才起作用 例如,在以下代码中,锁定成功: public function run() { $filePointerResource = fopen('/tmp/lock.txt', 'w'); if (flock($filePointerResource, LOCK_EX)) { sleep(10); } else { exit('Could not get lock!'); }

flock()
函数是否仅在与代码执行相同的方法中使用时才起作用

例如,在以下代码中,锁定成功:

public function run()
{
    $filePointerResource = fopen('/tmp/lock.txt', 'w');
    if (flock($filePointerResource, LOCK_EX)) {
        sleep(10);
    } else {
        exit('Could not get lock!');
    }
}
public function run()
{
    if ($this->lockFile()) {
        sleep(10);
    } else {
        exit('Could not get lock!');
    }
}

private function lockFile()
{
    $filePointerResource = fopen('/tmp/lock.txt', 'w');
    return flock($filePointerResource, LOCK_EX);
}
但是,在以下代码中,锁定不成功:

public function run()
{
    $filePointerResource = fopen('/tmp/lock.txt', 'w');
    if (flock($filePointerResource, LOCK_EX)) {
        sleep(10);
    } else {
        exit('Could not get lock!');
    }
}
public function run()
{
    if ($this->lockFile()) {
        sleep(10);
    } else {
        exit('Could not get lock!');
    }
}

private function lockFile()
{
    $filePointerResource = fopen('/tmp/lock.txt', 'w');
    return flock($filePointerResource, LOCK_EX);
}

我还没有看到任何关于这方面的文档,所以我对这种行为感到困惑。我使用的是php版本5.5.35。

我认为基于类的尝试的问题是,当
lockFile
方法完成
$filePointerResource
时,超出了范围,这可能就是释放锁的原因

这是可行的,哪一种支持这一理论

<?php

class test {
    public function run()
    {
        $fp = fopen('lock.txt', 'w');
        if ($this->lockFile($fp)) {
            echo 'got a lock'.PHP_EOL;
            sleep(5);
        } 
        /*
         * Not going to do anything as the attempt to lock EX will
         * block until a lock can be gained 

        else {
            exit('Could not get lock!'.PHP_EOL);
        }
        */
    }

    private function lockFile($fp)
    {
        return flock($fp, LOCK_EX);
    }
}

$t = new test();
$t->run();

哇,这就解释了。非常感谢。