【发布时间】:2011-06-14 22:16:17
【问题描述】:
我正在使用 file() 来读取文件,例如带有标签的数组。我想锁定文件,但我似乎无法让 flock() 处理该文件。是否有可能做到这一点?如果是这样,怎么做?如果不是,file() 是否从一开始就锁定文件并缓解任何潜在的共享问题?
【问题讨论】:
-
你能提供一个代码示例来描述你想在这里实现什么吗?你使用什么文件系统?
我正在使用 file() 来读取文件,例如带有标签的数组。我想锁定文件,但我似乎无法让 flock() 处理该文件。是否有可能做到这一点?如果是这样,怎么做?如果不是,file() 是否从一开始就锁定文件并缓解任何潜在的共享问题?
【问题讨论】:
根据the documentation(特别是cmets),它不会读取通过flock 锁定的文件。
您有 2 个选择。
使用fgets 读取文件(不检查错误):
$f = fopen($file, 'r');
flock($f, LOCK_SH);
$data = array();
while ($row = fgets($f)) {
$data[] = $row;
}
flock($f, LOCK_UN);
fclose($f);
使用file() 读取文件并使用单独的“lockfile”:
$f = fopen($file . '.lock', 'w');
flock($f, LOCK_SH);
$data = file($file);
flock($f, LOCK_UN);
fclose($f);
unlink($file . '.lock');
【讨论】: