2013-07-17 196 views
0

我有這個代碼,我想上傳圖像與它自己的名字。Php上傳文件沒有重命名

<?php 
print_r($_FILES); 
$new_image_name = "foto1.jpg"; 
move_uploaded_file($_FILES["file"]["tmp_name"] 
,"/home/izmircic/public_html/upload/".$new_image_name);?> 

我試圖

<?php 
print_r($_FILES); 
move_uploaded_file($_FILES["file"]["name"], "/home/izmircic/public_html/upload/"); 
?> 

,但沒有奏效。

+2

您的第一個代碼接近您的目標,只需使用'$ _FILES [「file」] [「name」]而不是'$ new_image_name]' – 2013-07-17 06:47:44

+0

使用tmp_name,因爲這是一種危險的方式!不要忘了清理tmp_name阻止像../index.php所有文件名,例如阻止所有php腳本(如C99外殼) – 0xBAADF00D

+1

@Akam謝謝它的工作 – Burak

回答

0

move_uploaded_file()的參數是當前路徑,包括文件名和包含文件名的目標路徑。

它應該是:

move_uploaded_file($_FILES["file"]["tmp_name"] ,"/home/izmircic/public_html/upload/".$_FILES["file"]["name"]); 

你也應該測試返回值,看它是否失敗與否:

$moved = move_uploaded_file($_FILES["file"]["tmp_name"] ,"/home/izmircic/public_html/upload/".$_FILES["file"]["name"]); 

if($moved){ 
    echo 'success'; 
} else { 
    echo 'failed'; 
} 

通過允許上傳的文件,以保持其原來的名字,你無論你在做什麼,都需要驗證它,例如,如果你只需要圖像,然後檢查文件擴展名並將圖像加載到GD庫中以驗證它實際上是圖像。

爲了獲得最佳安全性,最好將文件存儲在文檔根目錄之外,並根據需要使用PHP腳本來提供它們,並且最好使用生成的文件名而不是允許上傳者選擇。

+0

不是'tmp_name','name'是應該驗證。 'tmp_name'沒有意義,它只是一個具有臨時路徑的隨機文件名。 – MrCode

0
try this 
<?php 

print_r($_FILES); 
$new_image_name = "foto1.jpg"; // remove this one and replace $_FILES["file"]["name"] 
move_uploaded_file($_FILES["file"]["tmp_name"] 
     , "/home/izmircic/public_html/upload/" . $_FILES["file"]["name"]); 
?> 
+0

謝謝gayan!阿卡姆也這麼說。感謝大家。 – Burak

0

我認爲這可能爲你工作

move_uploaded_file($ _ FILES [ 「文件」] [ 「tmp_name的值」],「.//家/ izmircic /的public_html /上傳/".$_文件[ 「文件名」]);