* flock の扱いに問題がある [#j360ba5c] - ページ: [[BugTrack2]] - 投稿者: [[yamamo]] - 優先順位: 普通 - 状態: 提案 - カテゴリー: 本体バグ - 投稿日: 2008-05-13 (火) 03:50:06 - バージョン: ** メッセージ [#f062686a] + fclose 前にアンロックしている -- fclose($fp) の前に flock($fp, LOCK_UN) していますが、これは不要であり、かつ問題があります。fclose によってロックも解除されるので、通常は明示的にアンロックする必要はありません。また、fclose によってバッファがフラッシュされる前にロックを解除した場合、別プロセスが不完全な状態のファイルを読み込んでしまう可能性があります。 + flock が失敗する環境への対応 -- flock 失敗時に die するコードと、何もしないコードが混在しています。NFS など flock が動作しない環境もあるため、flock 後の 'or die...' を全て取り払ってしまうか、設定ファイルで無視させることもできるようにした方がよいと思います。(flock 以外の手段によるロックを選択できるようになればベストですが...) -- (余談) NFS で使っている環境というのもあまり珍しくはないと思うのですが、みなさんどうしているんでしょうかね..? NFS 越しでロックできない場合でも、環境によって flock がちゃんと FALSE を返す場合と、ロックできてもないのに TRUE を返してしまう場合があるようです。 -------- - 関連: [[BugTrack/164]], [[BugTrack2/98]], [[BugTrack2/166]] -- &new{2008-05-13 (火) 19:17:45}; - [[official:質問箱3/260]] -- &new{2010-10-24 (日) 12:29:43}; - [[PHP Manual のflock関数>PHP関数:flock]]より >変更履歴 |バージョン|説明|h |5.3.2|ファイルのリソースハンドルを閉じたときにロックを自動的に解放する機能が削除されました。 ロックの解放は、常に手動で行わなければなりません。| <だそうです。「fclose 前にアンロックしている」は、むしろ存在していないと困る((2011-01-06 時点で、すでにPHP 5.3.5までリリース済み))という・・・ -- &new{2011-01-19 (水) 18:09:47}; #comment