PHP で、ファイルが既にロックされているかどうかをテストするにはどうすればよいflock
ですか? たとえば、別の実行中のスクリプトが次を呼び出した場合:
$fp = fopen('thefile.txt', 'w');
flock($fp, LOCK_EX);
PHP で、ファイルが既にロックされているかどうかをテストするにはどうすればよいflock
ですか? たとえば、別の実行中のスクリプトが次を呼び出した場合:
$fp = fopen('thefile.txt', 'w');
flock($fp, LOCK_EX);
if (!flock($fp, LOCK_EX|LOCK_NB, $wouldblock)) {
if ($wouldblock) {
// another process holds the lock
}
else {
// couldn't lock for another reason, e.g. no such file
}
}
else {
// lock obtained
}
docsで説明されているようにLOCK_NB
、ロックを取得するための非ブロッキング試行を行うために使用し、失敗した場合は$wouldblock
引数をチェックして、他の何かがロックを保持しているかどうかを確認します。
次のように確認します。
if (!flock($file, LOCK_EX)) {
throw new Exception(sprintf('File %s is locked', $file));
}
fwrite($file, $write_contents);