2012-04-14 61 views
1

我有一個名爲'name = fileImage'的文件輸入。現在我有如下,它檢查是否文件中的文件夾(圖像文件中)存在的PHP代碼或不:如何上傳具有不同文件名的文件

if (file_exists("ImageFiles/" . $_FILES["fileImage"]["name"])) 
    { 

    } 

我的問題是,如果一個文件並在文件夾中存在,怎麼能編碼,使得它仍然上傳文件,但它給了它不同的文件名。也許像在文件名的末尾自動添加一個數字來給它一個不同的文件名?

+0

我認爲上傳的文件通常應該存儲完全不同於其原始名稱的名稱。這樣你可以防止信息泄漏(人們將鏈接從「myfile.txt」改爲「test.txt」,「secret.doc」等等來查看其他人的文件),不必擔心文件名中的國際字符,並避免在需要將文件複製到不同的文件系統時的複雜情況(例如,如果在同一文件夾中有「test.txt」和「Test.txt」,則複製到Windows進行開發將會搞亂。 – DCoder 2012-04-14 13:59:21

回答

6

$_FILES只是一個變量,恰好是超全球性的,並預先填充了文件上傳數據。意思是你可以很容易地改變它。

例如:

if(file_exists("ImageFiles/".$_FILES['fileImage']['name'])) { 
    $parts = explode(".",$_FILES['fileImage']['name']); 
    $ext = array_pop($parts); 
    $base = implode(".",$parts); 
    $n = 2; 
    while(file_exists("ImageFiles/".$base."_".$n.".".$ext)) $n++; 
    $_FILES['fileImage']['name'] = $base."_".$n.".".$ext; 
} 
// now use $_FILES['fileImage']['name'] just like you would normally 
0

如果要重命名上傳的文件到您自己選擇的名稱,你可以嘗試

<?php 

    //Any file name user/uploader has chosen/used on his/her computer 
    $tmp_name = $_FILES["domainfile"]["tmp_name"]; 

    //Name you want 
    $name = "MyDesiredName.png"; //save as MyDesiredName.png 

    //Move/save file 
    move_uploaded_file($tmp_name, $name); 

?> 

顯然這個代碼將取代舊的文件,每次一新文件被上傳。
爲了不讓這種情況發生,您需要在$ name
中引入一些變量並執行$ name ++並找到一種方法來存儲其值以備將來參考。

相關問題