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

时间:2012-03-25 19:08:47

标签: php flock

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

$file=fopen($file_p);

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

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

我该怎么做?

3 个答案:

答案 0 :(得分:14)

docs中所述,使用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
}

答案 1 :(得分:-1)

你的flock电话是检查它是否已被锁定。如果它被锁定,if()语句将失败,所以你可以用以下内容抛出一个else:

if (flock($file, LOCK_EX)) {//lock was successful
    fwrite($file,$write_contents);
} else {
    echo "$file is locked.";
}

答案 2 :(得分:-2)

我会查看是否无法锁定文件,如下所示:

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

fwrite($file, $write_contents);