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


Php json_encode returning different values on 2 different servers for same object

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

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

Array
(
    [stats] => Array
        (
            [6871] => 200
        )
    [answers] => Array
        (
            [0] => 7171
        )
)

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

对于服务器 A:

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

对于服务器 B:

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

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

服务器正在运行:

  • 乌班图目录
    • 服务器 A:Ubuntu 14.04.1 LTS
    • 服务器 B:Ubuntu 13.10
  • 恩金克斯
    • 服务器 A:nginx/1.6.2
    • 服务器 B: nginx/1.5.12
  • PHP-FPM
    • 服务器 A:PHP 5.5.9
    • 服务器 B PHP 5.5.3

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

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