Возьмите следующую строку 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']);
на нашей машине разработки (5.2.10-2ubuntu6.4
с Suhosin Patch 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
, которое, очевидно, было перемещено в основной массив как собственное значение - это естественным образом нарушает весь следующий код.
Мы также загрузили версию PHP для Windows 5.2.5
, чтобы проверить, есть ли ошибка в json_decode()
, но мы получаем правильный вывод здесь.
Есть ли какие-либо известные проблемы с json_decode()
, которые могли бы вызвать это странное поведение?
В настоящее время мы совершенно невежественны ...
Спасибо всем вам!
С уважением
Stefan