0

私は人々がコンテンツを提出し、それが集合的な画像に挿入されるウェブサイトを持っています。私のコードは機能しますが、これまでに1つの問題が見つかりました。

2人が同時に書き込もうとすると(たとえば、同時に送信された場合)、出力ファイルは0KBになります。つまり、空のファイルになります。

私は出力バッファ、GD2、file_put_contentsを次のように使用して書いています:

ob_start();
imagejpeg($map);
file_put_contents(MAP, ob_get_contents(), FILE_BINARY);
ob_end_clean();

私が疑問に思っているのは、この問題を解決するための最善の方法は何ですか?

ありがとう!

4

2 に答える 2

2

file_put_contents(MAP, ob_get_contents(), LOCK_EX)

于 2011-05-24T22:15:27.500 に答える
1

しばらく前に試したPHPで文書化されたロックメカニズムは、システムでの衝突を確実に防ぐようには見えませんでした。単純なWebサイトのカウンターでも、他の試行を行った後、実際のファイル名にカウンター値が含まれる空のファイルを使用することになりました。これは、ファイルの名前変更が少なくとも不可分操作であるためです。

問題はおそらくオペレーティングシステムとファイルシステムに依存し、最近修正される可能性もありますが、このような問題が続く場合は、ファイルを変更する前にファイルの名前を別の名前に変更してから、名前を変更することで、独自のロック方法を実装してみてください。完了したら元に戻します。

または、画像をデータベースに保存することを検討することもできます。

于 2011-05-24T22:27:25.043 に答える