file_put_contentsは"w"の書き込みしかできなかった悲劇

PHPのfile_put_contents は、文字列をファイルに書き込む関数だが、癖のある関数のひとつなんだそうだ。
http://php.net/manual/ja/function.file-put-contents.php

この関数は、 fopen()、 fwrite()、 fclose() を続けてコールしてデータをファイルに書き込むのと等価です。

とオフィシャルにある。たしかにfopen()、 fwrite()、 fclose()をやってくれているようだが、fopen()には付帯するオプションは多い。

このサイトに
[PHP]file_put_contentsの罠
あるように、fopen()にはwモード、aモード、cモードなどがあって、必ずしもwモードだけではすべての対処をできるわけではないっていうことだ。
ただし、オプションは他にもあって、

FILE_USE_INCLUDE_PATH filename をインクルードディレクトリから探します。
FILE_APPEND filename がすでに存在する場合に、データをファイルに上書きするするのではなく追記します。
LOCK_EX 書き込み処理中に、ファイルに対する排他ロックを確保します。

というように、LOCK_EXやFILE_APPENDでクリアができそうな感じです。

こちらで
php-5.2.5以前のfile_put_contentsではLOCK_EXによる排他ロックは動かない(5.2.6でFix)
分解して解説してくれているので、ぜひ参考にしてみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA