mt_rand 和随机数不起作用 (PHP)
mt_rand and rand not working (PHP)
我遇到了一个问题,当我尝试使用 mt_rand 或 rand(更大范围)随机生成数字时,我根本得不到任何结果。这曾经在我的服务器上运行良好,但现在似乎有问题,我不确定为什么。
<?php
echo 'Your number is: '.rand(0, 99999999999999999999);
?>
我在哪里更新它(使用 9 位数字):
<?php
echo 'Your number is: '.rand(0, 999999999);
?>
下面的例子可以正常工作。我最近更改了我的服务器版本 PHP 7.0。有没有办法增加最大数量或更好的方法来做到这一点?谢谢
要运行 php 7 中的代码,您必须进行类型转换
<?php
echo 'Your number is: '.rand(0,(int) 99999999999999999999);
?>
在32位和64位系统上,数字99999999999999999999
太大,无法用PHP7中的整数表示,所以变成了浮点数。
但是,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 位,它会有所不同)。因此,这样做将始终为您提供该函数中尽可能广泛的随机正数。
微时间每次随机生成。
function microtimeRand( $min, $max ) {
$microtimeInt = intval( microtime( true ) * 100 );
$microtimeInt = $microtimeInt % ($max - $min);
$microtimeInt += $min;
return $microtimeInt;
}
我遇到了一个问题,当我尝试使用 mt_rand 或 rand(更大范围)随机生成数字时,我根本得不到任何结果。这曾经在我的服务器上运行良好,但现在似乎有问题,我不确定为什么。
<?php
echo 'Your number is: '.rand(0, 99999999999999999999);
?>
我在哪里更新它(使用 9 位数字):
<?php
echo 'Your number is: '.rand(0, 999999999);
?>
下面的例子可以正常工作。我最近更改了我的服务器版本 PHP 7.0。有没有办法增加最大数量或更好的方法来做到这一点?谢谢
要运行 php 7 中的代码,您必须进行类型转换
<?php
echo 'Your number is: '.rand(0,(int) 99999999999999999999);
?>
在32位和64位系统上,数字99999999999999999999
太大,无法用PHP7中的整数表示,所以变成了浮点数。
但是,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 位,它会有所不同)。因此,这样做将始终为您提供该函数中尽可能广泛的随机正数。
微时间每次随机生成。
function microtimeRand( $min, $max ) {
$microtimeInt = intval( microtime( true ) * 100 );
$microtimeInt = $microtimeInt % ($max - $min);
$microtimeInt += $min;
return $microtimeInt;
}