2012-02-28 48 views
0

我已閱讀有關命名上傳的圖片的幾個問題,人們通常建議哈希圖像內容生成唯一的文件名以及自動防止重複存儲。但是,如果兩個用戶上傳相同的圖像,然後其中一個用戶想刪除它? 每次圖像被刪除時,我們都需要爲其他所有者執行一些檢查。網站上圖像文件的名稱:散列或隨機字符串?

的重複文件恕我直言可能性通常是很小的;與此同時,這種檢查需要添加幾串代碼,並且在性能方面會花費一些代價(圖庫往往使用巨大的表)。

那麼,爲什麼不使用真正的隨機字符串名稱? 在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的圖像文件,或爲每個用戶創建一個文件夾? (我認爲它不是一個好主意,讓太多的文件在同一文件夾。) 只要它符合你的要求,你可以做任何你想要的,但哈希方法可能被證明更有效。

+0

我真的在Webdev的新手,沒有我自己有噸圖像的經驗,但也有人說,分裂文件夾提高性能,如A/B/abcdef.jpg。至於使用主鍵,我也想知道爲什麼在其他問題中的人不會這樣說。 – Kadilov 2012-02-28 09:05:51

+0

爲包含百萬個文件的文件夾創建和讀取索引肯定會減慢整個過程。 – 2012-02-28 09:11:07