警告:mt_rand():max(-1)小于min(1)

时间:2014-08-27 18:27:51

标签: php linux centos

以下脚本提供以下输出。我在i386服务器上运行PHP版本5.5.12和Apache / 2.2.15(CentOS)。注意我在几乎完全相同的服务器x​​86_64上运行相同的脚本,但我没有遇到错误。

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

警告:mt_rand():max(-1)小于min(1)in   第2行的/var/www/html/testing/mt_rand.php

导致此错误的原因是什么,我该如何解决?

2 个答案:

答案 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

来自PHP.net in mt_rand()

  

<强>描述

     

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