Php json_encode在同一对象的2个不同服务器上返回不同的值

时间:2015-01-20 15:08:05

标签: php arrays json ubuntu nginx

我有2个服务器,每个服务器运行相同的应用程序,我有一个返回json响应的函数。

使用print_r($object)时,我在两台服务器上都会这样:

Array
(
    [stats] => Array
        (
            [6871] => 200
        )

    [answers] => Array
        (
            [0] => 7171
        )

)

当我使用json_encode($object);时,我得到了这个:

对于服务器A:

{"stats":{"6871":200},"answers":["7171"]}

对于服务器B:

{"stats":{"6871":200},"answers":[7171]}

因此,一台服务器将整数值answers编码为字符串。

服务器正在运行:

  • 的ubuntu
    • 服务器A:Ubuntu 14.04.1 LTS
    • 服务器B:Ubuntu 13.10
  • nginx的
    • 服务器A:nginx / 1.6.2
    • 服务器B:nginx / 1.5.12
  • PHP-FPM
    • 服务器A:PHP 5.5.9
    • 服务器B PHP 5.5.3

两个nginx.conf文件都是相同的。我似乎无法弄清问题在哪里,我已经坐了几个小时,有没有人有任何想法?

1 个答案:

答案 0 :(得分:1)

print_r()函数无法准确表示数据类型:

<?php

$string_values = array(
    'stats' => array (
        6871 => '200'
    ),
);

$numeric_values = array(
    'stats' => array (
        6871 => 200,
    ),
);


print_r($string_values);
print_r($numeric_values);

...将打印两次相同的输出:

Array
(
    [stats] => Array
        (
            [6871] => 200
        )

)
Array
(
    [stats] => Array
        (
            [6871] => 200
        )

)

您最好切换到var_dump()

var_dump($string_values, $numeric_values);
array(1) {
  ["stats"]=>
  array(1) {
    [6871]=>
    string(3) "200"
  }
}
array(1) {
  ["stats"]=>
  array(1) {
    [6871]=>
    int(200)
  }
}