2014-02-27 60 views
1

我有一個做大量使用mt_rand & mt_srand的應用,這個問題是很多主機商都有利,默認情況下,suhosin.mt_srand.ignore,這導致我的應用程序無法正常工作,因爲沒有按播種」將不起作用......如何寫我自己的mt_rand()&mt_srand?

由於我的應用程序已經在一些託管服務器上運行(不啓用此擴展名)我想創建自己的mt_rand & mt_srand功能,在PHP中,並讓他們返回相同結果(與種子相同)與內置函數一樣,這樣我就不會依賴主機提供者是否啓用了這個擴展。

我看了一下rand.c(http://lxr.php.net/xref/PHP_5_4/ext/standard/rand.c),它是mt_rand()& mt_srand()的源代碼,但是我對C的瞭解很差,並且我無法將它自己遷移到php。

有誰知道能不能做到?或者想幫助我呢?

+0

你不應該這樣做。良好的隨機數生成非常複雜。如果你堅持,不過,看到這個問題:http://stackoverflow.com/questions/9482290/workaround-for-suhosin-mt-srand-ignore-to-consistently-shuffle-an-array-in-php –

+0

我我已經看到了這個問題。這兩個緩存和寫一個不同的隨機功能,也不會在我的情況下做的,因爲我不能提前究竟會是每一個種子我的應用程序產生的訴說,我需要產生完全相同的結果mt_rand&mt_srand隨機函數爲了向後兼容而生產。 –

+0

@EdCottrell提​​到的問題在任何情況下似乎都沒有世界上最偉大的PRNG。 – abligh

回答

0

您可以嘗試一個共同的PRNG算法,例如一個PHP中的實現https://github.com/ruafozy/php-mersenne-twister

但是,請不要依賴這些數字是加密的安全 - 這意味着使用這些如用於在遊戲中生成隨機迷宮,但不用於加密你的日記。