file()在读取时是否锁定文件?

时间:2011-01-25 02:01:20

标签: php file flock

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

1 个答案:

答案 0 :(得分:4)

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

您有两种选择。

  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');