3
A
回答
3
uniqid()會起作用。
但是,您也可以使用md5()或sha1()來創建實際圖像的哈希值。如果有人上傳圖像兩次,這將減少多餘的文件。
2
你必須接受你的文件名可能不會很短,但最好的做法是RFC 4122,並以最快的PHP實現的一個是這樣的:
// Execution (1000 IDs) took 7.509 milliseconds
// Example uuid: f40bc6a1-3bce-4472-add8-bbbe500b7f72
function mimec_uuid()
{
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
}
個人雖然,我已經使用以下的(更快和更短)的算法,成功爲沒有需要擴展如Flickr項目:
// Execution (1000 IDs) took 5.097 milliseconds
// Example uuid: 2c2e4067d1c92109660b8deecae1be08
function xuuid()
{
return md5(microtime() . mt_rand(0, 0xffff));
}
0
一個非常簡單的方法是使用一些獨特的用戶標識符和時間戳,
$imgName = md5($userEmail.microtime());
0
我讓圖像上傳與原始圖像的名稱,爲SEO的目的。如果我保持原始文件名不變,Google等會發現用戶的蝙蝠俠或艾菲爾鐵塔的圖像。所以我只需將mktime添加到前面,然後保存它。
$imagename = str_replace(' ','-',$imagename);
$imagename = str_replace('_','-',$imagename);
$target_path = $_SERVER['DOCUMENT_ROOT']."/uploads/".mktime()."-".$imagename;
+0
壞主意,如果用戶提交的文件名是'../../ etc/passwd'或包含\ 0和東西... – Boldewyn 2010-04-20 19:02:52
0
32位MD5生成的圖像文件名有什麼問題?真的不太長。
如果像布萊恩,你打算讓他們使用自己的文件名,請確保你帶什麼不好的字符,例如:。 「」等爲安全起見
相關問題
- 1. 唯一的文件名attibute
- 2. 文件名圖片上傳
- 3. 上傳後唯一的文件名
- 4. 文件名的唯一標識。
- 5. 唯一的輸出文件名
- 6. MPMediaItem生成唯一的文件名
- 7. 多個圖片上傳後的唯一名稱
- 8. 使用散列存儲具有唯一文件名的圖像
- 9. 來自Interop。*文件的短文件名
- 10. 從文件名生成唯一散列
- 11. 問題與現有的文件名和創建一個唯一的文件名
- 12. 如何爲上傳的照片生成短文件名?
- 13. 如何在一組html文件中編譯唯一圖像文件名列表?
- 14. 隱藏文件名的產品圖片
- 15. 短越好唯一ID
- 16. 什麼是生成短而唯一的文件/文件夾名稱的好方法?
- 17. 短文件名問題?
- 18. SQLite短文件名8.3
- 19. AppleScript - 獲取文件夾中唯一文件的名稱?
- 20. 唯一事件名稱
- 21. 命名IP掃描結果與唯一的文件名
- 22. 圖像製作照片,在文件名
- 23. 短文件名與Windows中的長文件名
- 24. Dropbox的唯一文件ID
- 25. Python:如何創建一個唯一的文件名?
- 26. rails helper給上傳文件一個唯一的名字?
- 27. Python中的短唯一摘要
- 28. 如何返回一個沒有文件名或擴展名的圖片
- 29. PHP獲取唯一的文件名,如果文件存在添加數字並重試直到獲得唯一
- 30. 將長文件名轉換爲短文件名(8.3)
對於大型的圖像,這將是很慢。創建一個UUID的速度要快很多,即使是(相當多餘的)檢查衝突 – 2010-04-18 09:29:28
真的,我不會推薦這個用於大型圖像,但我們可能在談論相當小的文件,通常用於網頁內容 – selfawaresoup 2010-04-18 09:31:05
備註哈希算法沒有被設計爲生成唯一值 – Gumbo 2010-04-18 11:30:03