在我的测试服务器上修复了我的PHP应用程序后,我将它推送到我的生产服务器,修复程序无法工作。在跟踪它之后,我发现ksort()只会导致索引键溢出整数大于最大32位有符号值(2147483648)在我的生产服务器上。在我的测试服务器上,它只会溢出大于最大有符号64位整数(9223372036854775808)的整数。使用ksort发生不可预知的整数溢出
两个服务器(如全我可以告诉)具有相同的软件配置
- 的Ubuntu 12.10
- 内核版本的Linux版本3.0.0-15 - 仿制PAE
PHP 5.4 .6-1ubuntu1.2
- CPU生产:AMD的Phenom(商标)II X4 910
- 测试服务器上的CPU:AMD速龙(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:30:14
“uname -m”在每台机器上显示的是什么?您的生产服务器是否运行32位内核而运行64位内核的测试服务器? – rtev 2013-05-01 19:33:21
对不起,我在最后添加了我的实际问题。 “uname -m”的输出在两台服务器上都是x86_64。 – 2013-05-01 19:37:19