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

时间:2014-07-18 17:52:11

标签: 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位上的PHP 5.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)));
    ...
}

我找不到任何有关此行为的解释。想法?

0 个答案:

没有答案