此代码在我的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>";
?>
答案 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服务器。
好运