mt_rand和rand不工作(PHP)

时间:2016-04-29 10:53:45

标签: php random php-7

我遇到了一个问题,当我尝试使用mt_rand或rand(在更大的范围内)随机生成数字时,我根本没有得到任何结果。这曾经在我的服务器上工作正常,但现在似乎有问题,我不确定为什么。

<?php
echo 'Your number is: '.rand(0, 99999999999999999999);
?>

我在哪里将其更新为(使用9位数字):

<?php
echo 'Your number is: '.rand(0, 999999999);
?>

下面的示例将正常工作。我最近改变了我的服务器版本PHP 7.0。有没有办法增加最大数量或更好的方法来做到这一点?感谢。

3 个答案:

答案 0 :(得分:2)

在32位和64位系统上,数字99999999999999999999太大而无法在PHP 7中表示为整数,因此它变为浮点数。

但是,mt_rand()需要两个整数。由于99999999999999999999太大而不是整数,因此当您将其传递给函数PHP 7 throws an error, because it cannot be safely converted时。您没有为999999999收到此错误,因为它小到足以成为整数。

无论如何,你当前的代码可能在PHP 5下没有你想要的那样:99999999999999999999在64位系统上被静默转换为7766279631452241920,而在32位上也是如此系统。因此,您无法获得全方位的随机数。您撰写了rand(0, 99999999999999999999),但实际上您已获得rand(0, 7766279631452241920)

如果您只想从最宽范围内获取随机数,请尝试以下方法:

<?php
echo 'Your number is: '.rand(0, PHP_INT_MAX);
?>

PHP_INT_MAX是一个包含最大可能整数的常量(根据您是否在32位或64位上而不同)。因此,这样做总能为您提供该函数中最广泛的随机正数。

答案 1 :(得分:1)

要在php 7中运行代码,你必须进行类型转换

<?php
echo 'Your number is: '.rand(0,(int) 99999999999999999999);
?>

答案 2 :(得分:0)

Microtime每次都会随机产生。

function microtimeRand( $min, $max ) {
    $microtimeInt = intval( microtime( true ) * 100 );
    $microtimeInt = $microtimeInt % ($max - $min);
    $microtimeInt += $min;

    return $microtimeInt;
}