7

書き込み先のファイルがありますが、最初に ( を使用して) ロックしてflock()、他のスクリプトがそのファイルに書き込めないようにする必要があります。ので、私は持っています:

$file=fopen($file_p);

if (flock($file, LOCK_EX)) {//lock was successful
    fwrite($file,$write_contents);          
}

ただし、他のスクリプトが書き込みできないように、既にロックされているかどうかを確認する必要があります。

これどうやってするの?

4

3 に答える 3

14

docsで説明されているようにLOCK_NB、ロックを取得するための非ブロッキング試行を行うために使用し、失敗した場合は$wouldblock引数をチェックして、他の何かがロックを保持しているかどうかを確認します。

if (!flock($fp, LOCK_EX|LOCK_NB, $wouldblock)) {
    if ($wouldblock) {
        // something already has a lock
    }
    else {
        // couldn't lock for some other reason
    }
}
else {
    // lock obtained
}
于 2013-05-14T22:17:42.727 に答える
-1

あなたの群れの呼び出しは、それがすでにロックされているかどうかを確認するためのチェックです。ロックされている場合、その if() ステートメントは失敗するため、次のようなもので else をスローできます。

if (flock($file, LOCK_EX)) {//lock was successful
    fwrite($file,$write_contents);
} else {
    echo "$file is locked.";
}
于 2012-03-25T19:11:56.660 に答える
-2

次のように、ファイルのロックを取得できなかったかどうかを確認します。

if (!flock($file, LOCK_EX)) {
    throw new Exception(sprintf('Unable to obtain lock on file: %s', $file));
}

fwrite($file, $write_contents);
于 2012-03-25T19:21:50.860 に答える