排他制御をするとき、ブロックしない(LOCK_NB)を指定すると flock()そのものは必ず成功する(trueが返る)。
ブロックされてたか否かは 3番目の引数($wouldblock) を見て判定する。
$wouldblockがfalseならロックをゲットできた、trueならロックできなかった(他の誰かがすでにゲットしてた)。
ロック時にブロックするように指定した(LOCK_NBをつけなかった)ときは、ブロックが解除された時点で $wouldblockがfalse(ロックできた)で返る。
#!/usr/bin/php <? $fp = fopen("/tmp/hoge","w+") or die("fopen error"); flock($fp,LOCK_EX|LOCK_NB,$wouldblock ) or die("flock error"); if($wouldblock){ print("already lock\n"); exit(); }else{ print("get lock\n"); } // 処理を書く sleep(30); ?>
「ロックできなかったらflock()がfalseで返る」などという説明は誤り。多分。