我有一個名爲'name = fileImage'的文件輸入。現在我有如下,它檢查是否文件中的文件夾(圖像文件中)存在的PHP代碼或不:如何上傳具有不同文件名的文件
if (file_exists("ImageFiles/" . $_FILES["fileImage"]["name"]))
{
}
我的問題是,如果一個文件並在文件夾中存在,怎麼能編碼,使得它仍然上傳文件,但它給了它不同的文件名。也許像在文件名的末尾自動添加一個數字來給它一個不同的文件名?
我有一個名爲'name = fileImage'的文件輸入。現在我有如下,它檢查是否文件中的文件夾(圖像文件中)存在的PHP代碼或不:如何上傳具有不同文件名的文件
if (file_exists("ImageFiles/" . $_FILES["fileImage"]["name"]))
{
}
我的問題是,如果一個文件並在文件夾中存在,怎麼能編碼,使得它仍然上傳文件,但它給了它不同的文件名。也許像在文件名的末尾自動添加一個數字來給它一個不同的文件名?
$_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
如果要重命名上傳的文件到您自己選擇的名稱,你可以嘗試
<?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 ++並找到一種方法來存儲其值以備將來參考。
我認爲上傳的文件通常應該存儲完全不同於其原始名稱的名稱。這樣你可以防止信息泄漏(人們將鏈接從「myfile.txt」改爲「test.txt」,「secret.doc」等等來查看其他人的文件),不必擔心文件名中的國際字符,並避免在需要將文件複製到不同的文件系統時的複雜情況(例如,如果在同一文件夾中有「test.txt」和「Test.txt」,則複製到Windows進行開發將會搞亂。 – DCoder 2012-04-14 13:59:21