0

在我的脚本中,我srand(date("Ymd"))整天使用相同的序列生成确定的随机数。这在我的本地和 apache 环境中运行良好。

在 nginx/php-fpm 上,就像我在实时环境中使用的那样,rand()即使 srand 被初始化为相同的数字,它也会生成另一个数字序列。

是否有另一个更可靠的种子功能或者我需要编写自己的生成器?

4

1 回答 1

0

你可以试试mt_srand()mt_rand()而不是。

您现在使用的rand()srand()函数利用了主机操作系统中内置的随机函数。这意味着当您从一个平台移动到另一个平台时,您可能会使用完全不同的数字生成器。

相比之下,该mt_rand()函数使用 PHP 本身内置的 Mersenne Twister 算法来生成其随机数。

从理论上讲,这意味着从一个平台到另一个平台的序列应该更可预测。

如果您从 32 位 PHP 版本迁移到 64 位 PHP 版本,您可能仍然会发现序列会发生变化,但除此之外,我希望它在所有情况下给出相同的序列,给定相同的种子。

希望有帮助。

于 2013-08-22T08:38:14.127 回答