64位系统上意外的PHP整数溢出

64位系统上意外的PHP整数溢出,php,int,overflow,Php,Int,Overflow,我的代码包括以下代码段: public function query($query) { static $seed = 0; $seed = max($seed + 1, (int)(microtime(true) * 10000)); ... } 此操作在我的机器上成功,即$seed=14057043101099。但是,在两台服务器上,它在第一次尝试时失败,分配$seed=1,之后每次都成功 这三台机器都是CentOS 6.5 64位上的PHP5.3.X。我已经测试并

我的代码包括以下代码段:

public function query($query)
{
    static $seed = 0;
    $seed = max($seed + 1, (int)(microtime(true) * 10000));
    ...
}
此操作在我的机器上成功,即$seed=14057043101099。但是,在两台服务器上,它在第一次尝试时失败,分配$seed=1,之后每次都成功

这三台机器都是CentOS 6.5 64位上的PHP5.3.X。我已经测试并确认它们都返回了64位整数的正确响应:

$ php -a

php > echo PHP_INT_MAX;
9223372036854775807

php > echo (int)(microtime(true) * 10000);
14057043101145
以下解决方法解决了该问题:

public function query($query)
{
    static $seed = 0;
    $seed = max($seed + 1, round((microtime(true) * 10000)));
    ...
}

我找不到对这种行为的任何解释。想法?

可能是有签名/无签名的吗?]我怀疑。我们完全在64位整数范围内。使用64位软件!=64位php@绝对是!这就是为什么我在最初的帖子中包含了我的PHP_INT_MAX测试。编辑:在我写它的时候。