我遇到了一个问题,即使用AJAX通过POST发送的大型数据集并没有使它成为$_POST
PHP中的变量.
用户通过webform上传Excel/CSV文件,并通过AJAX进行解析.该特定示例具有775个记录,每个记录具有13个字段/元素.添加正在提交的其他字段,数据集中的元素少于11,000个.根据我在这个问题上所做的研究,32位浏览器(即Firefox,Chrome等)应该能够处理42.9亿个元素,所以我不认为数据大小是一个问题,特别是作为响应从文件上传包含所有元素.
只有在提交整个表单进行验证并输入数据库时,问题才会出现.问题是Firebug和Chrome开发者工具上的控制台显示整个数据集已提交:
做一个var_dump
上$_POST
给出了这样的:
php.ini已'post_max_size'
设置为200M.甚至'upload_max_filesize'
设定为100M.我个人测试的Firefox 32.0.3和Chrome 37.0.2062.103 m以及UAT测试的其他旧版本(包括IE 10)都会出现此问题.
AJAX调用是:
new wrapper.ajax('/t1.php', { type: 'POST', data: data, form: $('form[name=oppForm]'), success: function (response) { if (response.result) { window.location = response.result; } }, complete: function () { $("#submit").loading('done'); } });
PHP是:
有什么想法吗?
编辑
在与其他开发人员交谈之后,我还检查了输出
php://input
并发现它DID包含浏览器发送的整个POST数据,但数据没有正确转换为$ _POST.但是,如果我从帖子数据中删除10个键,并提交765而不是775,它确实可以正常工作.
问题最终是'max_input_vars'
在php.ini
文件中没有设置得足够高.该值设置为10,000,用户提交的数据接近11k,因此其中一些被截断.将此值更改为更大是解决问题的方法.