我正在通过ajax发送一个包含上传文件的FormData对象,但是当我尝试上传大文件(> 5M)时,我收到了空的$ _POST和$ _FILES变量。
阅读了很多有关此问题的文章,我几乎应用了所有内容,但没有用。
I've tried on php.ini:
- max_execution_time = 300
- max_input_time = 300
- post_max_size = 2048M (large but compulsory)
- upload_max_filesize = 2048M (large but compulsory)
- max_input_vars = 2000 (trying different values)
On HTTP/HTTPS directives (some have no sense but I was trying in a desperately way to see the behaviour):
- FcgidConnectTimeout 300
- FcgidIOTimeout 300
- FcgidIdleTimeout 300
- FcgidBusyTimeout 300
- IPCCommTimeout 9999
- FcgidMaxRequestLen 21474836480
我的代码如下:
var form = $('form[name="myform"]');
var formData = new FormData(form[0]);
/*
Also tried this:
var file = $("form[name='myform'] input[name='filename']");
formData.append("my_upload", (file[0]).files[0]);
*/
$.ajax({
type: 'post',
data: formData,
dataType: 'json',
async: true,
url: '/mysite/controllers/Controller.php',
processData: false,
contentType: false,
...
});
因此,对于<5M的文件,一切都可以在我的本地服务器和生产服务器中完美运行。对于大于5M的文件,仅在本地服务器上有效,而在生产服务器上则无效(我在其中收到空的$ _POST和$ _FILES变量)。尽管生产服务器在CloudFlare的WAF下,但它们通常具有一些变量配置。