2011-03-05 97 views
1

我正在使用此腳本上傳文件。自從我第一次嘗試以來,我沒有對filetype進行任何檢查。我使用的是Ubuntu,並在php.ini文件中將文件上傳設置爲'on'。但是我仍然無法上傳文件。通過php上傳文件時出錯

<?php 
if(isset($_POST['send'])) 
{ 
$uploaddir = "/home/harbhag/Desktop/"; 
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 
echo $uploadfile; 

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
    echo "File is valid, and was successfully uploaded.\n"; 
} else { 
    echo "Possible file upload attack!\n"; 
} 

} 
?> 

<html> 
<form enctype="multipart/form-data" action="upload.php" method="POST"> 
    <!-- MAX_FILE_SIZE must precede the file input field --> 
    <input type="hidden" name="MAX_FILE_SIZE" value="30000000" /> 
    <!-- Name of input element determines name in $_FILES array --> 
    Send this file: <input name="userfile" type="file" /> 
    <input type="hidden" name="send" value="send" /> 
    <input type="submit" value="Send File" /> 
</form> 
</html> 
+1

什麼都在'$ uploaddir'目錄(寫)權限? – helle 2011-03-05 09:24:54

+1

你有輸出嗎? – alexn 2011-03-05 09:26:07

+0

@helle,自從我的主目錄以來,我對$ uploaddir具有寫權限。 @alexn,我得到了代碼中寫的「可能的文件上傳攻擊」。但是我沒有收到任何消息,說明錯誤的可能原因。 – hsinxh 2011-03-05 09:29:57

回答

4

您應該使用$uploaddire$uploadfile兩個變量,使文件的有效路徑。

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$uploadfile)) { 

同時注意點

  1. 目標目錄應具有寫權限
  2. 文件的大小要上傳必須符合PHP的upload_max_filesize(默認值是2MB)限制
+0

它沒有幫助。是的,upload_max_filesize已經設置爲50MB – hsinxh 2011-03-05 09:30:49

+0

好的,我已經解決了。我改變了目錄,並給了它完整的寫權限和它的工作。我不需要使用$ uploaddir – hsinxh 2011-03-05 09:39:33

1

使用move_uploaded_file時要特別小心。它不會在分區之間移動文件,hostng公司可能會在你的php文件的其他地方有它們的上傳臨時目錄。

這是一個安全的選擇使用:

$tempname = $_FILES['userfile']['tmp_name']; 
if (is_uploaded_file($tempname)) { 
    copy($tempname, $uploadfile); 
} 
+0

感謝您的建議。我會牢記這一點。 – hsinxh 2011-03-06 09:16:43