我注意到只有XAMPP发生错误。
我尝试了其他4个实时主机帐户(包括AWS,hostgator和其他2个),它们在数字上的行为相同但不是XAMPP。 以下是在真实服务器和XAMPP上运行相同的 echo 时会发生的情况:
/* 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:
precision = 20(请注意,所有实时服务器只有12个!)
现在是:
/* XAMPP */
$testid = 5039307356925138;
echo (int)$testid;// 753691858
echo $testid;// 5039307356925138
正如您可能已经猜到它仍然不是解决方案而且脚本无法正常运行,因为XAMPP将5039307356925138视为753691858?!?
此外,过度提高精度会导致3.250000000001%或其他使用其他数字的问题。
我尝试使用新版本重新安装XAMPP,并在另一台计算机上尝试过,但所有内容都相同。
对于那些在windows localhost中使用XAMPP的人,您是否看到同样的问题?
可能是什么原因?如何解决它????
答案 0 :(得分:1)
由于您使用的是XAMPP,因此Windows只有32位。这反过来意味着该数字不得超过[-2 147 483 648,2 147 483 647]的范围。在Linux和iOS上,我相信有XAMPP的64位版本。
因此,您的主机很可能使用64位版本,这将允许使用更高的数字作为整数。您所看到的是溢出,达到了限制并且您再次开始"从底部范围。
由于PHP是松散类型的,因此可以将字符串和整数与相同的值进行比较,例如
"10" == 10 // true
"11" == 10 // false
"10" === 10 // false because of strict comparison
所以它可能是一个使用字符串而不是整数的解决方案(因为字符串的长度没有限制)。
从PHP7的release announcement开始,它宣布从PHP7开始,将会持续支持64位。因此,如果操作系统运行它,并且引擎是64位且PHP7或更高,则您将完全支持64位(这反过来允许您使用更高的整数值)。