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)
分解して解説してくれているので、ぜひ参考にしてみてください。