В XAMPP номера действуют иначе, чем на реальных серверах?

Я заметил ошибку, происходящую только с XAMPP.

Я попробовал с 4 другими учетными записями живого хостинга (включая AWS, hostgator и 2 другими), они все действуют одинаково на номера, но не на XAMPP.
Вот что происходит при запуске того же эхо на реальных серверах и XAMPP:

/* ALL SERVERS */
$testid = 5039307356925138;
echo (int)$testid;// 5039307356925138
echo $testid;// 5039307356925138

/* XAMPP AT WINDOWS 10 LOCALHOST*/
$testid = 5039307356925138;
echo (int)$testid;// 753691858
echo $testid;// 5.03930735692514E+15

Что это значит и почему !?

Проработав несколько часов в номере, проверяя каждое сообщение на форуме,

Я увеличил точность в php.ini и перезапустил apache:

точность = 20 (обратите внимание, что на всех живых серверах только 12!)

Теперь есть:

/* XAMPP */
$testid = 5039307356925138;
echo (int)$testid;// 753691858
echo $testid;// 5039307356925138

Как вы уже могли догадаться, это все еще не решение, и сценарии не работают должным образом, потому что XAMPP рассматривает 5039307356925138 как 753691858?!?

Кроме того, слишком большое увеличение точности вызвало проблемы, такие как 3.250000000001% или что-то, где используются другие числа.

Я попытался переустановить XAMPP с новой версией и попробовал это на другом компьютере, но все они одинаковы.

Для тех из вас, кто использует XAMPP в Windows localhost, вы видите ту же проблему?

В чем может быть причина? как это исправить ????

2

Решение

Поскольку вы используете XAMPP, он имеет только 32 бита для Windows. Это, в свою очередь, означает, что число не может превышать диапазон [−2 147 483 648, 2 147 483 647]. Я считаю, что для Linux и iOS есть 64-битная версия для XAMPP.

Таким образом, весьма вероятно, что ваши хосты используют 64-битную версию, что позволит использовать гораздо более высокие числа в качестве целых чисел. То, что вы видите, это переполненный, предел достигнут, и вы «начинаете заново» с нижнего диапазона.

Поскольку PHP свободно набран, строку и целое число можно сравнить с одним и тем же значением, например

"10" == 10 // true
"11" == 10 // false
"10" === 10 // false because of strict comparison

Так что это может быть решение для работы со строками вместо целых чисел (потому что нет ограничений на длину строки).


От объявление о выпуске о PHP7, объявлено, что начиная с PHP7, будет последовательная поддержка 64 бит. Так что, если операционная система работает на нем, а ядро ​​64-битное с PHP7 или выше, у вас будет полная поддержка 64-битной (что, в свою очередь, позволяет использовать более высокие целочисленные значения).

1

Другие решения

Других решений пока нет …