检查文件是否已使用flock()锁定?

7 php flock

我有一个我正在写的文件,但我需要先锁定它(使用flock()),以防止任何其他脚本写入它.所以我有:

$file=fopen($file_p);

if (flock($file, LOCK_EX)) {//lock was successful
    fwrite($file,$write_contents);          
}
Run Code Online (Sandbox Code Playgroud)

但我需要检查它是否已被锁定,以防止其他脚本写入它.

我怎样才能做到这一点?

Rya*_*efi 14

文档中所述,用于LOCK_NB进行非阻塞尝试以获取锁定,并在失败时检查$wouldblock参数以查看其他内容是否包含锁定.

if (!flock($fp, LOCK_EX|LOCK_NB, $wouldblock)) {
    if ($wouldblock) {
        // something already has a lock
    }
    else {
        // couldn't lock for some other reason
    }
}
else {
    // lock obtained
}
Run Code Online (Sandbox Code Playgroud)


Mik*_*ell -2

我会检查是否无法获得文件的锁定,如下所示:

if (!flock($file, LOCK_EX)) {
    throw new Exception(sprintf('Unable to obtain lock on file: %s', $file));
}

fwrite($file, $write_contents);
Run Code Online (Sandbox Code Playgroud)

  • 这是不正确的。如果你没有在传递给flock的操作上指定`LOCK_NB`位掩码,那么*默认情况下,这个函数将阻塞,直到获取请求的锁* ([source](http://www.php.net//手册/en/function.flock.php))。使用您给出的示例代码,“flock”将*不会*返回 false 来指示另一个进程已在文件上获取锁,而只是等待该进程释放其锁。 (2认同)