【发布时间】:2017-07-14 18:24:37
【问题描述】:
我在 Mac 和 Linux 中运行的 PHP 代码中遇到了不同的输出。
我有 2 台服务器运行以下代码:
$ltt = ((ord($str[7]) << 24) | (ord($str[8]) << 16) | (ord($str[9]) << 8) | (ord($str[10]))) / 1000000;
即使ord(str[ ]) 的输出也是一样的:
[7] = 254
[8] = 26
[9] = 22
[10] = 216
但是,在运行 php 5.3.6 的 MAMP 堆栈 (Mac) 上,如果 $ltt 原本应该是负数,则返回 4263.12265(不正确)。
在运行相同 php 版本的 LAMP 堆栈 (Ubuntu) 上,它将返回确切的负值 -31.84465。
这只发生在负数的情况下..
更新地址。信息:
- var 转储给出
þØçï_Kstring(25) "þØçï_K" - bin2hex 给出
000e1b00000000fe1a16d806e707ef0000045f0000004b0000
将函数简化为仅包含数字输入,输出仍然不同:
$ltt = (254 << 24 | 26 << 16 | 22 << 8 | 216)/ 1000000;
MAMP 上的4263.12265 和 LAMP 上的-31.84465
【问题讨论】:
-
两台机器的php配置一样吗?相同的版本并不总是意味着相同的设置;)
-
一个是 64 位,另一个是 32?我不认为它实际上应该在这里很重要......
-
两者都是 32 位的,配置是库存的,除了内存限制和 post_Data 的一些变化..
-
echo PHP_INT_SIZE给你什么?这将有助于消除 32 与 64 的问题。 -
@SalmanA 我在 MAMP 堆栈上得到 '8'