2014-08-27 128 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