2016-04-29 25 views
1

我遇到了一个问题,当我尝试随mt_rand或rand(更大规模)随机生成数字时,我根本得不到结果。这用于在我的服务器上正常工作,但似乎现在有问题,我不确定为什么。mt_rand和rand不工作(PHP)

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

在哪里,因为我把它更新到类似的信息(使用9位数字):

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

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

+0

你只需要随机字符串?无论是数字还是字符? – Poria

+1

有一个叫做'PHP_INT_MAX'的常量,也许这就是你要找的东西? – paskl

+0

你给浮动值,这就是为什么在PHP 7.0它给你错误 –

回答

1

要运行在PHP 7中的代码,你必须强制转换

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

为什么?你的意思是如果strict_types = 1被启用? – NikiC

+0

是的,我认为是。 –

+0

这是因为'rand'期望第二个参数是一个整数。当一个数字太大而无法放入一个整数的PHP时,它将变成一个浮点数(它可以包含更大的数字)。您应该配置您的服务器以在开发时显示警告(PHP会[显示警告](http://sandbox.onlinephpfunctions.com/code/e565cbb80672a798489d28eac5d380f5e06bcc87)); –

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位)。因此,这样做将始终为您提供来自该函数的最广泛的随机正数。