2016-04-29 57 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位)。因此,這樣做將始終爲您提供來自該函數的最廣泛的隨機正數。