前にこんな記事を書きました
Twitterで見かけたのですがPHP 7.1で直る予定らしいです
PHP 7.1でmt_rand()問題がついに解決されるのか? 一貫して壊れていたmt_rand()が直るとか素晴らしい
— 柊木 (@hrgruri) 2016年8月29日
PHP: 下位互換性のない変更点 - Manual https://t.co/zkffCdV5mv
「mt_srand() のオプションの第二引数に MT_RAND_PHP を指定すると、これまでの挙動 (間違った実装) を維持できます。」 という素晴らしい1文がある. 間違った実装!
— 柊木 (@hrgruri) 2016年8月29日
ドキュメントに「mt_srand() のオプションの第二引数に MT_RAND_PHP を指定すると、これまでの挙動 (間違った実装) を維持できます」と書いてあります
mt_rand() のデフォルトが、修正版のメルセンヌ・ツイスタ アルゴリズムを使うようになりました。mt_srand() の結果に依存するコードを書いていた場合は、mt_srand() のオプションの第二引数に MT_RAND_PHP を指定すると、これまでの挙動 (間違った実装) を維持できます
http://php.net/manual/ja/migration71.incompatible.php#migration71.incompatible.fixes-to-mt_rand-algorithm
また別件ですが同じページにrand()とsrand()が PHP 7.1 ではmt_rand()とmt_srand()のエイリアスになるという個人的には結構驚きな事が書かれています
rand()の一貫性はオプションとかで保たれないんでしょうか(?)
rand() と srand() は、それぞれ mt_rand() と mt_srand() のエイリアスになりました。つまり、 rand()、shuffle()、 str_shuffle()、array_rand() の出力がこれまでのバージョンとは変わるということです。
http://php.net/manual/ja/migration71.incompatible.php#migration71.incompatible.rand-srand-aliases