【发布时间】:2019-05-28 13:49:24
【问题描述】:
我正在通过 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 下,但它们通常具有一些变量配置。
【问题讨论】:
-
听起来确实像文件大小限制。你确定你成功更新了配置文件吗?您是否调试过引发的错误?
-
你应该确保你正在编辑正确的
php.ini,用php --ini标识它应该出现在加载的配置文件行中,在我的例子中是Loaded Configuration File: /etc/php/7.2/cli/php.ini。将值更改为 upload_max_filesize、max_file_uploads、post_max_size -
是的,我编辑了正确的 php.ini:# php --ini 配置文件 (php.ini) 路径:/etc/php/7.0/cli 加载的配置文件:/etc/php /7.0/cli/php.ini
-
调试这是我得到的:“TypeError: 'caller', 'callee', 和 'arguments' 属性可能无法在严格模式函数或在 Function.调用Getter (
:2:14)"
标签: javascript jquery ajax upload form-data