3


0

json_decode()の奇妙な動作

次の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 0.9.7`の 5.2.10-2ubuntu6.4`)では、次の正しい `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
        )
)

クライアントのプロダクションマシンで同じコードを実行すると(Suhosin Patch 0.9.6.2`とZend Optimizerを使用した 5.2.5`;ところで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 *プロパティは、明らかに独自の値としてメイン配列に移動されていることに注意してください。これにより、次のすべてのコードが自然に壊れます。

また、 `json_decode()`にバグがあるかどうかを確認するためにWindows PHPバージョン `5.2.5`をダウンロードしましたが、ここでは正しい出力を取得します。

この奇妙な動作を引き起こす可能性のある「json_decode()」の既知の問題はありますか?

私たちは現在完全に無知です…​

あなた方全員に感謝します!

宜しくお願いします

ステファン

2 Answer


1


OKみんな-問題は解決しました。 オプションが不足しているため、クライアントにインストール済みのPHPバージョンを更新して、何が機能するかを推測するように説得しました。

PHPのインストール(PHP、Zend Optimizer、Suhosin)に微妙なバグがあったようです。このバグはアップデートで修正されました。 それでも、かなり奇妙なことです。

あなた方全員に感謝します!

宜しくお願いします

ステファン


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));