fopenの結果をnullと比較しているが、PHPの仕様ではエラーの場合返ってくるのはfalse。
flockの引数にロックのモードを設定できるが、なんかLOCK_SH/LOCK_EXとLOCK_NBは論理和じゃなく普通に足し算するようだ。なのでちゃんとロックできない可能性がある。というかWindows環境でうまく動かないんだけど何故だか。
この辺だけでも不吉なコードなんだけど大丈夫なのかね。
でもlibcだと論理和ということになっている。
でもPHPのflockには第3の引数というものがあって、そこにtrueを指定するとノンブロッキングモードになるらしい。なんだそりゃ。
ext/standard/file.c(230)付近。3とか4とかマジックナンバーが出てきててかなり恐ろしい。これはもう無理かもわからんね。
act = Z_LVAL_PP(arg2) & 3; if (act < 1 || act > 3) {
こんなのもあるんだが、3で論理積とったら0..3にしかならんのだから、0だったらエラーにすりゃいいじゃん。 ところで第3引数が使われてない気がする。 いや、違う。errno.hで定義されるerrnoがEWOULDBLOCKだったら1になって返ってくるらしい。だから参照とってるのか。マニュアルが不正確なんだな。