php文件上传问题

时间:2011-02-28 20:49:40

标签: php file-upload

此代码在我的localhost中正常运行。我正在使用xampp 1.7.3。但是当我把它放在实时服务器中时它会显示Possible file upload attack!。 'upload /'是服务器上'public_html'文件夹下的文件夹。我可以通过该目录中的其他脚本上传文件。

<?php

$uploaddir = '/upload/';//I used C:/xampp/htdocs/upload/ in localhost. is it correct here?
$uploadfile = $uploaddir . basename($_FILES['file_0']['name']);

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

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

?>

6 个答案:

答案 0 :(得分:3)

您可能无法将文件移动到/upload/,这是服务器文件系统根目录下的“上传”文件夹,因此move_uploaded_file()报告FALSE和您的消息。此外,这个/upload/文件夹可能甚至不存在,也不可写。

您可能希望将其移至$_SERVER['DOCUMENT_ROOT'].'/upload/',这将指向您的虚拟主机根目录(类似于www或您上传应用程序文件的位置)。不要忘记创建此文件夹并相应地更改其权限(CHMOD 777是一个好主意)。

答案 1 :(得分:2)

问题是文件名中的前导斜杠。虽然它可能在你的XAMPP机器上正确解析,当它在你的服务器盒上时,前导斜杠会尝试将它放在文件系统根目录中。

它猜测这是一次攻击,因为人们有时可以捏造传入的参数来丢弃可以执行它们的有害文件!

答案 2 :(得分:1)

$ uploaddir很可能是错误的。使用

echo dirname(__FILE__);

获取Web服务器上根文件夹的真实完整路径,然后输入类似

的内容
/web/real/path/to/root/upload

作为路径。

答案 3 :(得分:0)

为什么不这样做:

$uploaddir = './upload';

它会相对于你的脚本在哪里,这是意图吗?否则你需要完整的目录(来自系统根目录)

答案 4 :(得分:0)

试试此代码

 $fltype=$_FILES['userfile']['type']; 
    echo $fltype."<br>";
    /*if($_FILES['userfile']['type'] != "image/gif") {
    echo "Sorry, we only allow uploading GIF images";
    exit;
    }*/

$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
$imgname=basename($_FILES['userfile']['name']);
$desc=$_POST["desc"];
echo "<br>".$imgname."<br>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "File uploading failed.\n";
}
$con=mysql_connect("localhost","root","");
$select=mysql_select_db("n1",$con);
$sql="insert into tblimage (imagename,description) values('$imgname','$desc')";
echo "<br>".$sql;
$rs=mysql_query($sql);
if($rs)
{
    echo "<br>Record inserted in table.<br>";
}
else
{
echo "<br>Error in table insersion.<br>";
}
echo "<br><br>uploaded image is::::<br><br>";
echo "<img src='$uploadfile' />";
?> 

答案 5 :(得分:0)

我遇到了同样的问题,上传脚本在localhost上工作但是可能出现文件攻击错误!在主机服务器上。

我通过授予777上传文件夹权限来修复它。转到ftp并右键单击文件夹并选择属性。勾选所有框(读/写/执行)并授予777权限。

也可以在linux上的etc /文件夹中编辑php.ini文件。 将以下设置更改为

upload_max_filesize:1024M post_max_size:1024M max_execution_time:6000 max_input_time:6000 memory_limit:128M

您可以使用SSH终端下载putty以访问linux服务器。

好运