以下脚本提供以下输出。我在i386服务器上运行PHP版本5.5.12和Apache / 2.2.15(CentOS)。注意我在几乎完全相同的服务器x86_64上运行相同的脚本,但我没有遇到错误。
<?php
$id=mt_rand ( 1 , 4294967295);
?>
警告:mt_rand():max(-1)小于min(1)in 第2行的/var/www/html/testing/mt_rand.php
导致此错误的原因是什么,我该如何解决?
答案 0 :(得分:3)
如果您想要一个介于1和4294967295之间且与平台无关的值,请使用以下命令:
$id=2147483648+mt_rand(-2147483647,2147483647);
这回答了部分问题,但是fedorqui回答了一个真正的问题,即某些平台上的整数限制在+/- 2,147,483,647。
答案 1 :(得分:2)
您碰巧使用的值大于整数最大值。正如What is the maximum value for a int32?所述,此值 2,147,483,647 。
<强>描述强>
int mt_rand(void)
int mt_rand(int $ min,int $ max)
返回值
min(或0)和max(或mt_getrandmax()之间的随机整数值, 如果max小于min ,则或FALSE。
来自PHP manual:
整数的大小取决于平台,尽管是最大值 大约20亿是通常的值(32位签名)。 PHP 不支持无符号整数。可以确定整数大小 使用常量PHP_INT_SIZE,并使用常量的最大值 自PHP以来的PHP_INT_MAX 4.4.0和PHP 5.0.5。
您的脚本在32位系统上失败,因为您提供的值约为40亿,而最大值约为20亿。解决方法可以是更改PHP_INT_MAX
。