PHP在服务器端未接收到所有的POST数据

4
我正在向运行PHP 5.3.3.7的服务器发布大约200KB大小的数据。实际上,这些数据是嵌套属性的JavaScript对象,在请求中看起来像这样:myObject[prop1][subprop1][key] = 5
然而,并非所有数据都被服务器接收到。发布的数据的最后一部分被截掉了。max_post_size设置为80MB,所以应该不是问题。我已经将请求表单数据与通过$_POST访问的数据进行了比较,有很多数据丢失了。
PHP版本是5.3.3.7。
造成这种情况的可能原因是什么?

3
展示一些代码,特别是你如何处理发送和接收。 - Mark
数据是否编码正确的可能性有多大?您是让浏览器进行POST还是使用cURL或类似的工具? - alex
2个回答

4
你说你使用的是 PHP 5.3.3,但这可能不太正确。自从 PHP 5.3.9 版本以来,新增了一个设置项 max_input_vars,它限制了传递给脚本的POST(和GETCOOKIE等等)变量的数量。
如果我没错的话,只需要在 php.iniVirtualHost 定义.htaccess 中进行调整即可(ini_set 在脚本开始后已经被修剪掉了)。
出于安全原因,引入了这个设置项,请注意: http://www.phpclasses.org/blog/post/171-PHP-Vulnerability-May-Halt-Millions-of-Servers.html

2
我增加了max_input_vars,问题得到了解决。这是唯一一个只关注解决问题而不是寻找变通方法的答案。谢谢! - Anton Gildebrand

1

在客户端尝试使用jQuery并将数据转换为JSON,然后再发送POST请求到服务器。

   $.ajax({
        method: 'POST',
        url: 'http://someurl.com',
        data: JSON.stringigy(youJsObject),
        success: function(data) {
            // processing data from server
        }
    });

抱歉,但您误解了我的问题,请求本身没有问题。问题出在服务器无法接收所有的属性。 - Anton Gildebrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接