在我的测试服务器上修复我的PHP应用程序之后,我将它推送到生产服务器并且修复程序无效。在跟踪它之后,我发现ksort()导致索引键溢出,只有大于我生产服务器上的最大32位有符号值(2147483648)的整数。在我的测试服务器上,它只会溢出大于最大有符号64位整数的整数(9223372036854775808)。
两台服务器(尽我所知)具有相同的软件配置
PHP 5.4.6-1ubuntu1.2
重现此问题
$arr = array(2147483648 => 1, 5 => 2); ksort($arr); print_r($arr);
在我的生产服务器上输出以下内容:
Array
(
[-2147483648] => 1
[5] => 2
)
完全相同的代码在我的测试服务器上输出以下内容:
Array
(
[5] => 2
[2147483648] => 1
)
我正在试图找出导致这种情况的原因。我应该在哪里寻找缩小服务器具有不同整数大小的原因。是否有可能我使用32位整数编译的不同版本的PHP(尽管两者看起来都相同)?
答案 0 :(得分:0)
看看PHP_INT_SIZE
http://php.net/manual/en/language.types.integer.php
整数大小可以使用常量PHP_INT_SIZE来确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX来确定。
我还建议在php.ini或memory_limit
中增加PHP ini_set()
。