2011-10-07 62 views
1

我已經編寫了一個腳本將圖片上傳到我網站的特定部分。防止通過PHP重複上傳圖片

需要做什麼樣的檢查來檢測重複條目是否試圖通過表單上傳?

例如: 一位用戶提交firefoxlogo.jpg。 幾天後的另一個用戶嘗試提交firefox.jpg這是相同的圖像,只是改名。

回答

4

...相同的圖像...

同爲「二進制數據是相同的」或「圖像看起來類似的」?在第一種情況下,您可以使用sha1_file(對於SHA1哈希值)計算文件的哈希值。你不應該依賴文件名來檢查文件是否唯一。例如。一個用戶可以上傳包含瀏覽器徽標的「firefox.png」,而另一個用戶可以上傳其中的屏幕截圖。散列具有固定長度(對於SHA1是40),這是使用文件名的另一個優點。

+0

也sha1_file(或md5_file)實在是太慢了,只使用它,如果確有必要。 .. – 2011-10-07 18:11:03

+1

我懷疑這是一個問題,因爲計算一次。我剛剛用N = 100 * 5進行了測試,對於sha1,10MB文件的平均時間爲44ms。 'dd if =/dev/urandom of = r10 bs = 1M count = 10; time php -r'for($ i = 0; $ i <100; $ i ++)sha1_file(「r10」);''。爲了比較,'php -r'''已經用了30ms。 – Lekensteyn

1

每次用戶上傳文件時,您都可以在數據庫中保留sha1哈希記錄(使用sha1_file)。當你獲得一個文件上傳時,抓住新文件的散列,而它仍然在臨時存儲中,然後在數據庫中查詢具有相同散列的條目。如果不存在,您可以繼續上傳文件。

0

看到這太http://php.net/exif,並不是絕對安全,以避免重複,而是一個更快的解決方案,以sha1_file

希望這有助於