我正在使用file()来读取带有标签的数组之类的文件。我想锁定该文件,但似乎无法在文件上使用Flock()。是否有可能做到这一点?如果是这样,怎么样?如果不是,则文件()是否从开始时锁定文件并减轻任何潜在的共享问题?

有帮助吗?

解决方案

根据 文档 (特别是评论),它不会读取通过锁定的文件 flock.

您有2个替代方案。

  1. 阅读文件 fgets (没有检查错误):

    $f = fopen($file, 'r');
    flock($f, LOCK_SH);
    $data = array();
    while ($row = fgets($f)) {
        $data[] = $row;
    }
    flock($f, LOCK_UN);
    fclose($f);
    
  2. 阅读文件 file() 并使用单独的“ lockfile”:

    $f = fopen($file . '.lock', 'w');
    flock($f, LOCK_SH);
    $data = file($file);
    flock($f, LOCK_UN);
    fclose($f);
    unlink($file . '.lock');
    
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top