2011-01-13 65 views
6

FILE_APPENDフラグが設定されたfile_put_contentsを使用してファイルにデータを書き込んだ場合、2人のユーザーが同時にデータを送信すると、それに関係なく追加されますか、1つのエントリが上書きされますか?2人のユーザーが同時にファイルに書き込みますか? (PHP/file_put_contents)

フラグをLOCK_EXに設定した場合、2回目の提出は最初の提出が完了するまで待つか、排他ロックを取得できないときにデータが失われますか?

どのようにPHPがそれを一般的に処理しますか?私はバージョン5.2.9を実行しています。それが問題ならば。

おかげで、 ライアン

答えて

2

あなたはまた、適切なロックを実装するためにflock機能をチェックすることができ

+0

LOCK_EX修飾子? –

+0

マニュアルには次のように書かれています: "デフォルトでは、この機能は要求されたロックが取得されるまでブロックされます;これは下記のLOCK_NBオプションで制御されます。したがって、LOCK_EXがエラーを返してすぐに返っても、それは同じ動作ではありません。 – Ass3mbler

+0

このようなクールな音は、正確にOPの後のものです。私の+1。 :-) –

1

あなたはLOCK_EXを経由して、排他的ファイルロックを設定した場合、書き込みをしようとした2番目のスクリプト(時間的に)単にますfile_put_contentsからfalseを返します。

です。つまり、ファイルが書き込み可能になるまで待機しません。

このようにして、その必要な場合は、おそらく倍の限定数(例えば:3)各試行間sleepの適切なサイズの用法をますfile_put_contents使用しようとすることで、この動作の中で自分自身をプログラムする必要があります。

+1

は、あなたが実行する必要があります(中/スリープトリックに基づいていない) 'while'と'であることを確認した後file_exists' 'sleep'ロック解除を待つことができます – RobertPitt

+0

質問1についてはどうすればいいです...ロックを使用しなかった場合、どうなりますか? – NightHawk

+0

@RobertPitt - これらの行に沿って私の答えを更新していました。先行のfile_existsチェックをうまくやってください。 :-) –

関連する問題