mt_rand和rand不工作(PHP)
我遇到了一个问题,当我尝试用mt_rand或rand(在更大范围内)随机生成数字时,我一点结果也没有。这过去在我的服务器上工作正常,但现在似乎有问题,我不确定为什么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中运行代码,您必须进行类型转
<?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;
}