7

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

$file=fopen($file_p);

if (flock($file, LOCK_EX)) {//lock was successful
    fwrite($file,$write_contents);          
}

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

我怎样才能做到这一点?

4

3 回答 3

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
}
于 2013-05-14T22:17:42.727 回答
-1

您的群呼是检查它是否已被锁定。如果它被锁定,则 if() 语句将失败,因此您可以在其上抛出一个 else 类似的东西:

if (flock($file, LOCK_EX)) {//lock was successful
    fwrite($file,$write_contents);
} else {
    echo "$file is locked.";
}
于 2012-03-25T19:11:56.660 回答
-2

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

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

fwrite($file, $write_contents);
于 2012-03-25T19:21:50.860 回答