Php 没有换行的POST失败,但换行有效吗?
我正在调试一个PHP应用程序,在那里我必须将一些数据发布到我的服务器,然后解析它并返回一些值——非常简单的东西 数据格式如下:Php 没有换行的POST失败,但换行有效吗?,php,json,post,Php,Json,Post,我正在调试一个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]
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)
我注意到我的应用程序无法正确解析帖子。代码如下所示:
function Foo() {
$state = somehow_get_state();
$bar = $_POST['pols'][$state];
// cool logic and stuff
array( // root-level array
array(
'1' => 'somestring',
'2' => '...',
'3' => '...',
'4' => '...'
),
array( // same as previous),
// more arrays, potentially up to 50 total
)
我立即放了一个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
这个(注意换行符)
前者只发布大约3.1KB的数据,而后者发布整个数据
有什么原因吗?我发布的是有效的JSON,看在我的份上,我不明白为什么一个有效,另一个无效
为了创建JSON,我创建了一个嵌套数组,如下所示:
function Foo() {
$state = somehow_get_state();
$bar = $_POST['pols'][$state];
// cool logic and stuff
array( // root-level array
array(
'1' => 'somestring',
'2' => '...',
'3' => '...',
'4' => '...'
),
array( // same as previous),
// more arrays, potentially up to 50 total
)
然后调用json\u encode($my\u array,json\u HEX\u APOS)
创建JSON
我希望这只是一个橡皮鸭的时刻。:-)
编辑:我正在离开我的电脑,但是TCP捕获显示了同样的情况。我回来时还会添加我的Apache/php信息 如果您使用的是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个变量进入一个请求。我对json不是很熟悉,因此这可能没有帮助,但我想到两件事:1:字符串中有一个编码错误的字符,这会破坏它,或者2字符串中的空格会导致它失败吗
[last_name]=Abraham&pols
注意Abraham后面的空格…在将数组编码为JSON之前,您可以在数组上尝试utf8_encode()
。了解数据的哪些部分正在解析,哪些部分与查询字符串无关会很有帮助。@EternalHour前3.1KB。