4

私は、ユーザーから 1 日に約 500 枚の写真がアップロードされるサイトで作業しています。これは非常に高い数値ではありませんが、異なるアップロード間で衝突が発生しています。一部のユーザーは、アップロードした画像の代わりに別の画像のサムネイルが表示されると報告しています。この問題の説明を探していたところ、stackoverflow でいくつかの質問を見つけました。

衝突するアップロードの PHP 一時ファイル名

PHP ファイルのアップロードが部分的なアップロードによって「ハイジャック」される

私が読んだように、問題はファイル tmp 名の衝突に関連しているようです。これを回避するためにupload_tmp_dir、ログに記録されたユーザー名から計算された整数に基づいて PHP 変数を変更し、衝突の可能性を減らすことを検討していました。ただし、この変数は実行時に変更できません。PHP の実行が開始された時点で、ファイルは既にサーバーにポストされているためです。

この問題を解決する方法がわかりません。今後、毎日のアップロード速度が増加し続ける場合に問題が発生しないように修正したいと考えています。

大量のアップロードを扱うサイトが多いので、どうやってこの衝突問題を回避しているのか気になります。私が作業しているサイトは、PHP 5.2.14 で実行されています。簡単にするために PHP ソリューションを好みますが、アップロード間で競合が発生しないことが保証されている限り、他のスクリプト言語を使用する既存のソリューションにも興味があります。

4

1 に答える 1

2

問題は DBlogic にもある可能性があります。安全な方法は、DB に行を挿入し、レコードの主キーを取得することです。その番号をファイル名として使用すると、衝突を防ぐことができます。次のようなことができます:

LOCK TABLES image WRITE;
INSERT INTO image (id) VALUES (NULL);
SELECT LAST_INSERT_ID();
UNLOCK TABLES;

次に、(auto_increment) ID を取得します。残りのデータ (たとえば別のテーブルへのタグ) を保存してファイルを処理すると、名前が衝突しなくなります。

于 2011-03-14T11:40:38.060 に答える