我正在调试一个PHP应用程序,我必须将一些数据发送到我的服务器,然后解析它并返回一些值 - 超级简单的东西。
数据格式为:
action=display_all_pols&donate_form=1&user_state=&state=AK&pols[LA][0][post_id]=2714&pols[LA][0][first_name]=Ralph&pols[LA][0][last_name]=Abraham &pols[LA][0][profile_image]=2762
我的数据大小因人而异,例如: 187字节,更大的东西,例如46KB。
我注意到我的应用程序无法正确解析POST。代码是这样的:
function Foo() {
$state = somehow_get_state();
$bar = $_POST['pols'][$state];
// cool logic and stuff
我立即在die(var_dump($_POST));
内放了一个Foo()
,注意到只有一部分数据真正被张贴了。
当我在命令行上测试它时,我注意到:
之间存在差异POST http://10.1.10.22/wesupportthat/wp-admin/admin-ajax.php
action=display_all_pols&donate_form=1&user_state=&state=AK&pols[LA][0][post_id]=2714&pols[LA][0][first_name]=Ralph&pols[LA][0][last_name]=Abraham &pols[LA][0][profile_image]=2762
这个(注意换行);
POST http://10.1.10.22/wesupportthat/wp-admin/admin-ajax.php
action=display_all_pols&donate_form=1&user_state=&state=AK&
pols[LA][0][post_id]=2714&
pols[LA][0][first_name]=Ralph&
pols[LA][0][last_name]=Abraham&
pols[LA][0][profile_image]=2762
前者只会发布大约3.1KB的数据,而后者则POST整个事情。
有原因吗?我发布了有效的JSON,因为对我的爱无法弄清楚为什么一个有用而另一个没有。
为了创建JSON,我正在创建一个嵌套数组,如下所示:
array( // root-level array
array(
'1' => 'somestring',
'2' => '...',
'3' => '...',
'4' => '...'
),
array( // same as previous),
// more arrays, potentially up to 50 total
)
然后调用json_encode($my_array, JSON_HEX_APOS);
来创建JSON。
我希望这只是一个橡皮鸭时刻。 : - )
编辑:我正在离开我的电脑,但TCP捕获显示同样的事情。我回来时还会添加我的Apache / php信息。
答案 0 :(得分:0)
如果你正在使用suhosin扩展,并且在/var/log/user.log中失败的试验后看到这样的行:
suhosin[...]: ALERT - configured POST variable limit exceeded - dropped variable 'x' (attacker 'x.y.z.207', file 'some_script.php')
然后它可能是这个扩展,它正在弄乱你的请求。在这种情况下,您需要禁用或更新suhosin的配置,例如在/etc/php5/conf.d/suhosin.ini中
更新或添加以下行:
suhosin.post.max_vars = 3000
suhosin.request.max_vars = 3000
此配置允许最多3000个变量进入请求。