2014-08-27 129 views
1

以下脚本提供以下输出。我在i386服务器上运行PHP版本5.5.12和Apache/2.2.15(CentOS)。注意我在x86_64几乎相同的服务器上运行相同的脚本,但没有遇到错误。警告:mt_rand():max(-1)小于min(1)

<?php 
$id=mt_rand (1 , 4294967295); 
?> 

警告:mt_rand():最大(-1)比小分(1)在 /var/www/html/testing/mt_rand.php第2行

导致此错误的原因是什么,以及如何解决此问题?

回答

2

您碰巧使用的值大于整数最大值。如在What is the maximum value for a int32?中所述,该值是2,147,483,647

PHP.net in mt_rand()

说明

INT mt_rand(无效)

INT mt_rand(INT $分钟,诠释$最大值)

返回值

min(或0)与max(或mt_getrandmax(), (含))之间的随机整数值,或FALSE(如果max小于最小值)。

PHP manual

的整数的大小是依赖于平台的,虽然约两十亿最大值 是通常的值(这是32位带符号的)。 PHP 不支持无符号整数。整数大小可以使用常量PHP_INT_SIZE确定为 ,使用常数 PHP_INT_MAX确定最大值,因为PHP 4.4.0和PHP 5.0.5。

你的脚本在32位系统上失败,因为你提供的值大约是40亿,而最大值是20亿。解决方法可以是更改PHP_INT_MAX

+0

不均匀。那。它的签名是32bit,所以〜20亿美元的积极的最大。 – 2014-08-27 18:38:45

+0

@MarcB对不起,我不明白你的意思。 – fedorqui 2014-08-27 18:41:56

+0

我已经尝试了多次,所以我确信我不会“发生”击中4294967295.这就是说,我相信你是对的。我会研究'PHP_INT_MAX'。 – user1032531 2014-08-27 18:42:26

3

如果你想1到4294967295之间的值,它是独立于平台,使用以下命令:

$id=2147483648+mt_rand(-2147483647,2147483647); 

这个答案的一部分,但fedorqui回答真正的问题是在某些平台上的整数有限到+/- 2,147,483,647。

+1

干得好! +1用于研究和寻找解决方法。 – fedorqui 2014-08-28 07:46:11