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. 如何爲上傳的圖片生成唯一的文件名
- 2. iOS |根據唯一文件名加載圖片
- 3. 唯一的文件名attibute
- 4. 將url編碼爲簡短唯一文件名
- 5. 文件名圖片上傳
- 6. Windows短文件名
- 7. 文件名的唯一標識。
- 8. log4j。唯一的日誌文件名
- 9. 上傳後唯一的文件名
- 10. MPMediaItem生成唯一的文件名
- 11. Red5和FLV文件的唯一命名
- 12. 生成唯一的文件名
- 13. 唯一的輸出文件名
- 14. 使用UUID的唯一文件名
- 15. AppleScript的獲得一個文件夾的唯一文件名
- 16. 發短信圖片,短信
- 17. 使用散列存儲具有唯一文件名的圖像
- 18. 多個圖片上傳後的唯一名稱
- 19. 來自Interop。*文件的短文件名
- 20. 從文件名生成唯一散列
- 21. 爲文件名添加唯一後綴
- 22. 問題與現有的文件名和創建一個唯一的文件名
- 23. 關於一點短的背景圖片
- 24. 如何在一組html文件中編譯唯一圖像文件名列表?
- 25. 如何爲上傳的照片生成短文件名?
- 26. 取文件的名稱/圖片上傳
- 27. 隱藏文件名的產品圖片
- 28. 更改上傳圖片的文件名?
- 29. 短越好唯一ID
- 30. 什麼是生成短而唯一的文件/文件夾名稱的好方法?
對於大型的圖像,這將是很慢。創建一個UUID的速度要快很多,即使是(相當多餘的)檢查衝突 – 2010-04-18 09:29:28
真的,我不會推薦這個用於大型圖像,但我們可能在談論相當小的文件,通常用於網頁內容 – selfawaresoup 2010-04-18 09:31:05
備註哈希算法沒有被設計爲生成唯一值 – Gumbo 2010-04-18 11:30:03