Я заметил ошибку, происходящую только с 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, вы видите ту же проблему?
В чем может быть причина? как это исправить ????
Поскольку вы используете 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-битной (что, в свою очередь, позволяет использовать более высокие целочисленные значения).
Других решений пока нет …