我將上傳的圖片存儲在一個文件夾中,同時將路徑和文件名存儲在數據庫中。請如何最好地生成唯一的文件名以避免文件夾中的名稱衝突?謝謝如何爲上傳的圖片生成唯一的文件名
1
A
回答
3
可能最接近的唯一值是數據庫文件ID。但是,如果將文件保存在不同的表中,則不再是這種情況(例如:ArticleFiles和NewsFiles表)。在這種情況下,您可以爲單獨的表使用單獨的目錄,或者爲文件添加前綴。
您可能還需要將文件從不同的主機名上傳到同一個服務器位置。在這種情況下,您可以在文件名前加上用於上傳的主機名。
人們傾向於使用time()函數,但這大多是提供信息的,因爲它不能保護您免受併發上傳。通過訂購,它可以幫助您更輕鬆地找到磁盤上的文件。出於同樣的原因,您可以在文件名中包含原始擴展名。
最後,用最短和最翔實的獨特價值或構成價值,你可以得到,像
$file = "{$HOST}.{$TYPE}.{$TIMESTAMP}.{$DATAID}.{$EXT}.uploaded";
然而,非常小心的跟在你上傳文件夾的訪問權限,因爲它是一個嚴重的安全風險。不要讓執行權,嘗試將其置於文檔根目錄之外,查看上傳的可能危險的文件等
7
你已經用PHP和MySQL標記了你的問題。
- 你可以使用PHP的uniqid函數生成一個唯一的字符串
- 你可以使用MySQL表來存儲有關的圖像信息,並使用AUTO_INCREMENT鍵在該表中,給你一個獨特的整數,你可以用作文件名
您有任何更具體的要求/目標嗎?如果沒有,我想這些解決方案中的任何一個都適合你。
0
您可以使用
$image_name=('Your folder path/'. time() .'.'$extension);
爲得到任何圖像擴展
$extension = getExtension($filename);
function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
雖然有點複雜,但它使您的工作變得輕鬆,您可以使用此擴展名驗證您的文件類型 ,如
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
{
echo '<h1>Unknown extension!</h1>';
$errors=1;
}else
//your code to save image in folder.
0
您是否考慮過將數據存儲在數據庫中?
如果您能夠;您將擺脫具有唯一文件名的需要,以及與數據庫不同步的文件&相關的問題。
相關問題
- 1. 如何爲上傳的照片生成短文件名?
- 2. 如何爲django模型生成唯一的文件名.FileField
- 3. MPMediaItem生成唯一的文件名
- 4. 生成唯一的文件名
- 5. 如何使用blueimp文件上傳生成的圖片預覽?
- 6. 圖片的唯一短文件名
- 7. 我們如何爲Box上傳的圖片生成縮略圖?
- 8. MarkLogic:如何生成唯一的文檔/ xml文件名
- 9. 文件名圖片上傳
- 10. 上傳後唯一的文件名
- 11. 獲取多次上傳的文件的Django生成的唯一名稱
- 12. 從文件名生成唯一散列
- 13. 如何使用jfilechooser生成唯一的文件名?
- 14. 如何生成唯一的文件名或路徑?
- 15. 取文件的名稱/圖片上傳
- 16. 更改上傳圖片的文件名?
- 17. 爲S3生成唯一的密鑰(文件名)
- 18. 生成的圖片文件上傳用於RSS
- 19. 上傳文件時爲文件提供唯一名稱
- 20. 多個圖片上傳後的唯一名稱
- 21. 爲上傳的圖片創建唯一的ID
- 22. WordPress - 如何通過文件名獲取上傳的圖片?
- 23. 圖片上傳+縮略圖生成器
- 24. path.getrandomfilename是否會每次生成一個唯一的文件名?
- 25. Python工具生成一個唯一的臨時文件名
- 26. Retrofit 2圖片上傳成功,但圖片上傳損壞的文件
- 27. 保存帶有唯一名稱的生成的Word文件(mailmerge)
- 28. 上傳圖片的文件名不能爲空
- 29. 生成唯一名稱?
- 30. R.java文件如何爲資源生成唯一標識
-1:time()函數不會保護您免受併發上傳。 – George
這裏我們可以使用time()或rand()作爲唯一文件名.... – omnath