【发布时间】:2016-04-01 16:13:19
【问题描述】:
我无法准确理解flock()ed 文件的锁定程度。我正在锁定一个简单的文本文件,如下所示:
// file_lock.php
$filename = "data.txt";
$delay = 5;
$lock = fopen($filename, "w");
if ($lock === FALSE || !flock($lock, LOCK_EX | LOCK_NB, $block) || $block) {
echo "ERROR: Can not open or lock " . $filename . "\n";
sleep($delay);
}
else {
echo "SUCCESS: " . $filename . " locked.\n";
sleep($delay);
flock($lock, LOCK_UN);
echo $filename . " unlocked\n";
}
然后,从另一个脚本,我检查文件 is_writable() / is_readable() :
// test.php
$filename = "data.txt";
if (is_readable($filename)) echo "File is readable\n";
else echo "File is not readable\n";
if (is_writable($filename)) echo "File is writable\n";
else echo "File is not writable\n";
但是当我运行它们时,它们都认为自己有访问权限:
$ php file_lock.php & php test.php
SUCCESS: data.txt locked.
File is readable
File is writable
data.txt unlocked
文档here 和here 的细节非常少,我错过了什么?我是否错误地使用了羊群?函数is_readable() 和is_writable() 是否会检查无关的内容以确定读/写能力?
【问题讨论】:
-
只是好奇,您是否尝试过在 test.php 脚本中实际写入文件?
-
是否可读/可写是 IIRC 纯粹的权限检查,它们不检查文件的锁定状态?
-
@Tom 我没有尝试与文件进行实际交互,我认为它不会工作,因为文件应该被锁定。
-
@Mark 我没想到,我会测试一下。
-
is_readable()/is_writeable 仅检查文件的权限。如果不先打开文件,您将无法获取文件的锁定或检查其锁定状态。
标签: php file-locking