3

私はfile()を使用して、タブ付きの配列のようなファイルを読み取ります。ファイルをロックしたいのですが、ファイルに対してflock()が機能していないようです。これを行うことは可能ですか?もしそうなら、どのように?そうでない場合、file()はファイルを最初からロックし、潜在的な共有の問題を軽減しますか?

4

1 に答える 1

4

ドキュメント(特にコメント)によると、を介してロックされたファイルは読み取られません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()別の「ロックファイル」を使用してファイルを読み取ります。

    $f = fopen($file . '.lock', 'w');
    flock($f, LOCK_SH);
    $data = file($file);
    flock($f, LOCK_UN);
    fclose($f);
    unlink($file . '.lock');
    
于 2011-01-25T02:03:15.013 に答える