После исправления моего PHP-приложения на тестовом сервере я отправил его на рабочий сервер, и исправление не сработало. После отслеживания я обнаружил, что ksort() вызывает переполнение ключей индекса для целых чисел, превышающих максимальное 32-битное значение со знаком (2147483648) только на моем рабочем сервере. На моем тестовом сервере он будет переполняться только для целых чисел, превышающих максимальное 64-битное целое число со знаком (9223372036854775808).
Оба сервера (насколько я могу судить) имеют одинаковую конфигурацию программного обеспечения.
- Убунту 12.10
- Версия ядра: версия Linux 3.0.0-15-generic-pae
PHP 5.4.6-1убунту1.2
- CPU on production: AMD Phenom(tm) II X4 910
- ЦП на тестовом сервере: 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
)
Я пытаюсь выяснить, что может быть причиной этого. Где я должен искать, чтобы сузить, почему серверы имеют разные целочисленные размеры. Возможно ли, что у меня может быть другая версия PHP (даже если обе кажутся одинаковыми), которая была скомпилирована с 32-битными целыми числами?