在我的脚本中,我srand(date("Ymd"))
整天使用相同的序列生成确定的随机数。这在我的本地和 apache 环境中运行良好。
在 nginx/php-fpm 上,就像我在实时环境中使用的那样,rand()
即使 srand 被初始化为相同的数字,它也会生成另一个数字序列。
是否有另一个更可靠的种子功能或者我需要编写自己的生成器?
你可以试试mt_srand()
,mt_rand()
而不是。
您现在使用的rand()
和srand()
函数利用了主机操作系统中内置的随机函数。这意味着当您从一个平台移动到另一个平台时,您可能会使用完全不同的数字生成器。
相比之下,该mt_rand()
函数使用 PHP 本身内置的 Mersenne Twister 算法来生成其随机数。
从理论上讲,这意味着从一个平台到另一个平台的序列应该更可预测。
如果您从 32 位 PHP 版本迁移到 64 位 PHP 版本,您可能仍然会发现序列会发生变化,但除此之外,我希望它在所有情况下给出相同的序列,给定相同的种子。
希望有帮助。