获取以下JSON字符串(由某些ExtJS代码生成 - 但这无关紧要):
[{"action":"Setting","method":"toggle","data":["welcome-home"],"type":"rpc","tid":2},{"action":"ContentExtFeFillout","method":"todo","data":[true,0,8,false],"type":"rpc","tid":3}]
作为POST
请求发送到服务器,并通过$GLOBALS['HTTP_RAW_POST_DATA']
检索。
运行
json_decode($GLOBALS['HTTP_RAW_POST_DATA']);
我们的开发机器上的(带有Suhosin Patch的5.2.10-2ubuntu6.4
0.9.7
)提供了正确的print_r()
输出:
Array
(
[0] => stdClass Object
(
[action] => Setting
[method] => toggle
[data] => Array
(
[0] => welcome-home
)
[type] => rpc
[tid] => 2
)
[1] => stdClass Object
(
[action] => ContentExtFeFillout
[method] => todo
[data] => Array
(
[0] => 1
[1] => 0
[2] => 8
[3] =>
)
[type] => rpc
[tid] => 3
)
)
在客户端的生产计算机上运行相同的代码(5.2.5
使用Suhosin Patch 0.9.6.2
和Zend Optimizer;顺便说一下SUSE Linux)提供以下print_r()
输出:
Array
(
[0] => stdClass Object
(
[action] => Setting
[method] => toggle
[data] => Array
(
[0] => welcome-home
)
[type] => rpc
)
[1] => 2
[2] => stdClass Object
(
[action] => ContentExtFeFillout
[method] => todo
[data] => Array
(
[0] => 1
[1] => 0
[2] => 8
[3] =>
)
[type] => rpc
)
[3] => 3
)
请注意缺少的 tid
属性,该属性显然已作为自己的值移入主数组中 - 这自然会破坏以下所有代码。
我们还下载了一个Windows PHP版本5.2.5
以检查json_decode()
中是否存在错误,但我们在此处获得了正确的输出。
json_decode()
是否存在可能导致这种奇怪行为的已知问题?
我们目前完全无能为力......
感谢大家!
祝你好运
的Stefan
答案 0 :(得分:1)
他们的PHP安装(PHP,Zend Optimizer和/或Suhosin)中似乎存在一个微妙的错误,该错误已通过更新修复。仍然是一件非常奇怪的事情。
感谢大家!
祝你好运
的Stefan
答案 1 :(得分:0)
您是否尝试过交换tid和键入密钥?另外如何使用硬编码变量来检查问题是否可以与$ GLOBALS ['HTTP_RAW_POST_DATA']一起使用?
尝试以下方法:
$t1='[{"action":"Setting","method":"toggle","data":["welcome-home"],"type":"rpc","tid":2},{"action":"ContentExtFeFillout","method":"todo","data":[true,0,8,false],"tid":2,"type":"rpc"}]';
print_r(json_decode($t1));