我有一个php网站,在codeigniter中,允许用户上传文件。上传适用于大多数文件。但是对于少数文件nginx抛出403禁止错误。喜欢
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
这是上传失败的示例 .rb 文件之一
# Sample code from Programing Ruby, page 58
string = <<END_OF_STRING
The body of the string
is the input lines up to
one ending with the same
text that followed the '<<'
END_OF_STRING
如果我从此文件中删除'<<'
,上传有效。这种过滤在哪里发生?
我看过nginx错误日志,里面什么都没有。我看过代码点火器日志,那里什么都没有。 事实上,上传请求没有到达我的Codeigniter控制器,所以在nginx到达那里之前必须被阻止吗?
这是用Javascript上传代码
function upload(file, params) {
var formData = new FormData();
formData.append("Filedata", file);
$.each(params, function(key, value) {
formData.append(key, value);
});
var xhr = new XMLHttpRequest();
var action = "/upload/file";
xhr.upload.onprogress = function(e){
// show progress with e.loaded, e.total
};
xhr.onerror = function(e) {
// handle error
};
xhr.open("POST", action, true);
xhr.send(formData);
}
在服务器端,我现在有简单的代码。
if( !isset($_FILES['Filedata']) || !file_exists($_FILES['Filedata']['tmp_name']) )
{
die('File not submitted.');
} else {
// Save file code is here
}
尝试您的应用程序/配置/配置.php 改变
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_-';
由
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_-><';
但要注意应用程序的安全性