我的代码包含以下代码段:
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)));
...
}
我找不到任何有关此行为的解释。想法?