【发布时间】:2014-01-16 17:47:40
【问题描述】:
我想要一个用作计数器的 PHP 文件。它将 a) 回显 txt 文件的当前值,并且 b) 使用排他锁递增该文件,因此在使用该文件时其他脚本无法对其进行读取或写入。
用户 A 将写入并增加此数字,而用户 B 请求读取文件。用户 A 是否可以锁定此文件,以便在用户 A 的写入完成之前没有人可以读取或写入它?
我过去使用过flock,但我不确定如何让文件等到它可用,而不是在它已被锁定时退出
我的目标是:
LOCK counter.txt; write to counter.txt;
同时
Read counter.txt; realize it's locked so wait until that lock is finished.
//
$fp = fopen("counter.txt", 'w+');
if(flock($fp, LOCK_EX)) {
fwrite($fp, $counter + 1);
flock($fp, LOCK_UN);
} else {
// try again??
}
fclose($fp);
【问题讨论】:
-
flock() 的第三个参数指定了阻塞行为:php.net/flock。但默认情况下,在获得锁之前会阻塞,这在同一文档中也有提及。
-
在使用这个的情况下,其他脚本会等到它不再被锁定吗?文档页面中没有太多详细信息。