2014-06-13 106 views
0

我想上傳一些GPX(XML技術)文件到服務器,並用動態文件名(例如0.gpx,1.gpx ...)重命名它們。我不知道如何使用move_uploaded_file函數執行此操作,因爲它只創建無延伸文件。我得到'name'文件而不是'name.gpx'文件。PHP move_uploaded_file動態文件名 - 文件沒有擴展名

不應該使用uploadef文件的PATHINFO_EXTENSION自動創建具有正確擴展名的文件嗎?

我試圖這樣調用該函數:

$filename = 0; 
move_uploaded_file($_FILES['uploadfiles']['tmp_name'][$f], $filename); 
$filename++; 

即使我嘗試創建一個擴展的字符串它不工作:

$tmp = 0; 
$ext = pathinfo($name, PATHINFO_EXTENSION); 
$filename = $tmp + "." + $ext; 
move_uploaded_file($_FILES['uploadfiles']['tmp_name'][$f], $filename); 
$tmp++; 

幫助嗎?

+0

如果您想知道/是否會爲您創建擴展名,答案是否定的。閱讀說明書http://www.php.net//manual/en/function.pathinfo.php –

回答

0

文件名應該有擴展名。這工作正常,我找到擴展名:

$temp = explode(".", $_FILES["uploadfiles"]["name"]); 
$extension = end($temp); 

echo $extension; // Display the extension 

$tmp = 0; 
$filename = $tmp.".".$extension; 
move_uploaded_file($_FILES['uploadfiles']['tmp_name'][$f], $filename); 
$tmp++; 

希望這會有所幫助。

+0

謝謝,這對我有用。我以爲我必須用'+'來製作一個字符串,但你說得對。 – Xantos

+0

請匹配白名單中的擴展名,因爲任何人都可以上傳php腳本或其他惡意的東西。 –

+0

這個Web應用程序只是大學的練習,所以我只需要它在localhost上。我已經將它與白名單進行了匹配,但沒有必要在此添加我的問題。不管怎樣,謝謝你。 – Xantos

0

我不認爲臨時文件有擴展名。

您可以手動添加「GPX」的名字:

$tmp = 0; 
$filename = $tmp . ".gpx"; 
move_uploaded_file($_FILES['uploadfiles']['tmp_name'][$f], $filename); 
$tmp++; 

或許檢查MIME類型和工藝的適當延長了它。

或者將$_FILES['uploadfiled']['name']的擴展名匹配到白名單中,並將其附加到最終的文件名中。

+0

對於我來說,'+'不適用,我也嘗試過。當我像上面建議的UserProg那樣做時,它就可以工作。不管怎麼說,還是要謝謝你。 – Xantos

+0

噢,這是一個點...習慣了python。 –