2011-03-05 99 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