2011-11-09 37 views

回答

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:time()函數不會保護您免受併發上傳。 – George

+0

這裏我們可以使用time()或rand()作爲唯一文件名.... – omnath

0

您是否考慮過將數據存儲在數據庫中?

如果您能夠;您將擺脫具有唯一文件名的需要,以及與數據庫不同步的文件&相關的問題。