2012-02-28 1 views
0

アップロードされた画像に名前を付けることに関していくつかの質問を読んだことがあります。通常、画像コンテンツをハッシュして一意のファイル名を生成し、重複を自動的に保存することを勧めています。しかし、2人のユーザーが同じ画像をアップロードし、そのうちの1人が削除したい場合は、 イメージが削除されるたびに、追加のオーナーのために何らかのチェックを行う必要があります。ウェブサイト上の画像ファイルの名前:ハッシュまたはランダムな文字列ですか?

IMHOは、通常、ファイルが重複している可能性があります。同時に、このチェックではコードを追加する必要があり、パフォーマンス面ではコストがかかります(ギャラリーは巨大なテーブルを使用する傾向があります)。

だから、本当にランダムな文字列を名前に使用しないのはなぜですか?例えばPHPで 、:

$filename = md5(mt_rand()); 

ハッシュはかなり長い値を生成することを言及すると、あなたが(バリエーションの数も変化することを念頭に置いて)望むようにランダムな値を使用すると、長さを調整することができない場合:

$filename = substr(md5(mt_rand()), 0, 15); 

、可能な衝突のループと (アイデアは別の質問から盗まれた):

while (true) { 
$filename = substr(md5(mt_rand()), 0, 15); 
if (!file_exists('somedir/'.$filename.'.jpg')) break; 
} 

あなたはどう思いますか?

答えて

0

イメージファイルの前にユーザーIDを付けたり、各ユーザーのフォルダを作成したりするのはなぜですか? (私は、同じフォルダ内にたくさんのファイルを保存することをお勧めしません) 要件に合っていれば、何でも構いませんが、Hashメソッドがより効果的であることが証明されている可能性があります。

+0

私はwebdevの初心者で、たくさんの画像を持っている自分の経験はありませんが、/ b/abcdef.jpgのようにフォルダを分割するとパフォーマンスが向上すると言う人もいます。プライマリキーの使用に関しては、他の質問の人がこのように話していないのはなぜかと思います。 – Kadilov

+0

100万個のファイルを含むフォルダのインデックスを作成して読み込むと、必ずプロセス全体が遅くなります。 –

関連する問題