在我的测试服务器上对我的PHP应用程序进行了修复之后,我将它推到了我的生产服务器上,这个修复程序没有工作。跟踪它之后,我发现ksort()导致索引键溢出,而整数的大小仅限于我的生产服务器上的最大32位有符号值(2147483648)。在我的测试服务器上,只有大于最大有符号64位整数(9223372036854775808)的整数才会溢出。
这两个服务器(据我所知)都有相同的软件配置。
1. CPU on production: AMD Phenom(tm) II X4 910
2. CPU on test server: AMD Athlon(tm) II X4 620
复制这个问题
$arr = array(2147483648 => 1, 5 => 2); ksort($arr); print_r($arr);在我的生产服务器上输出以下内容:
Array
(
[-2147483648] => 1
[5] => 2
)完全相同的代码在我的测试服务器上输出以下内容:
Array
(
[5] => 2
[2147483648] => 1
)我想找出是什么导致了这一切。我应该在哪里缩小为什么服务器有不同的整数大小。我是否可能有一个用32位整数编译的不同版本的PHP (尽管两者看起来是相同的)?
发布于 2013-05-01 19:35:44
看看PHP_INT_SIZE
http://php.net/manual/en/language.types.integer.php
整数大小可以使用常量PHP_INT_SIZE来确定,最大值可以使用自PHP4.4.0和PHP5.0.5以来的常量PHP_INT_MAX来确定。
我还建议在php.ini或ini_set()中增加PHP。
https://stackoverflow.com/questions/16324982
复制相似问题