POST数据在浏览器和PHP之间截断

时间:2014-10-07 16:01:50

标签: javascript php ajax post

我遇到了一个问题,即使用AJAX通过POST发送的大型数据集没有使用PHP中的$_POST变量。

用户通过webform上传Excel / CSV文件,并通过AJAX进行解析。该特定示例具有775个记录,每个记录具有13个字段/元素。添加正在提交的其他字段,数据集中的元素少于11,000个。根据我在这个问题上所做的研究,32位浏览器(即Firefox,Chrome等)应该能够处理42.9亿个元素,所以我不认为数据大小是一个问题,特别是作为响应从文件上传包含所有元素。

当提交整个表单进行验证并输入数据库时​​,问题才会出现。问题是Firebug和Chrome开发者工具上的控制台显示整个数据集已提交: Firebug Output

var_dump上执行$_POST即可: enter image description here

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,它确实可以正常工作。

1 个答案:

答案 0 :(得分:6)

问题最终导致'max_input_vars'文件中的php.ini设置得不够高。该值设置为10,000,用户提交的数据接近11k,因此其中一些数据被截断。将此值更改为更大可以解决问题。