mt_rand和rand不工作(PHP)

mt_rand和rand不工作(PHP),php,random,php-7,Php,Random,Php 7,我遇到了一个问题,当我尝试用mt_rand或rand(在更大范围内)随机生成数字时,我一点结果也没有。这过去在我的服务器上工作正常,但现在似乎有问题,我不确定为什么 <?php echo 'Your number is: '.rand(0, 99999999999999999999); ?> 其中,我将其更新为(使用9位数字): 下面的示例可以正常工作。我最近更改了我的服务器版本PHP7.0。有没有办法增加最大数量或更好的方法?谢谢。要在PHP7中运行代码,您必须进行类型转

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

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

其中,我将其更新为(使用9位数字):



下面的示例可以正常工作。我最近更改了我的服务器版本PHP7.0。有没有办法增加最大数量或更好的方法?谢谢。

要在PHP7中运行代码,您必须进行类型转换

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

在32位和64位系统上,数字
99999999999999999
太大,无法在PHP7中表示为整数,因此它变成了浮点

但是,
mt_rand()
接受两个整数。因为
99999999999999999
太大而不能是整数,所以当您将其传递给函数时。对于
99999999
,您没有收到此错误,因为它足够小,可以成为一个整数

无论如何,在PHP5下,您当前的代码可能没有达到您想要的效果:
999999999999999
在64位系统上被静默地转换为
7766279631452241920
,在32位系统上则被转换为其他内容。所以你没有得到全部的随机数。您编写了
rand(09999999999999999999)
,但实际上您得到了
rand(077666279631452241920)

如果您只想从尽可能宽的范围中选择一个随机数,请尝试以下操作:

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


PHP_INT_MAX
是一个包含最大可能整数的常量(取决于您使用的是32位还是64位)。因此,这样做将始终为您提供该函数中尽可能广泛的随机正数范围。

微时间每次都生成随机正数

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

    return $microtimeInt;
}

你只需要随机字符串,对吗?无论是数字还是字符?有一个常量叫做
PHP\u INT\u MAX
,也许这就是你要找的?你给的是浮点值,这就是为什么在PHP7.0中它给你错误为什么?您的意思是启用了strict_types=1吗?这是因为
rand
希望第二个参数为整数。当一个数字太大而无法放入整数时,PHP会将其转换为浮点数(可以包含更大的数字)。您应该将服务器配置为在开发时显示警告(PHP会);
function microtimeRand( $min, $max ) {
    $microtimeInt = intval( microtime( true ) * 100 );
    $microtimeInt = $microtimeInt % ($max - $min);
    $microtimeInt += $min;

    return $microtimeInt;
}