我遇到了一个问题,即使用AJAX通过POST发送的大型数据集没有使用PHP中的$_POST
变量。
用户通过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
var_dump($_POST);
有什么想法吗?
修改
在与其他开发人员交谈之后,我还检查了php://input
的输出,发现它DID包含浏览器发送的整个POST数据,但数据没有正确转换为$ _POST。但是,如果我从帖子数据中删除10个键,并提交765而不是775,它确实可以正常工作。
答案 0 :(得分:6)
问题最终导致'max_input_vars'
文件中的php.ini
设置得不够高。该值设置为10,000,用户提交的数据接近11k,因此其中一些数据被截断。将此值更改为更大可以解决问题。