【问题标题】:Broken Random PHP破碎的随机 PHP
【发布时间】:2011-04-19 19:23:37
【问题描述】:

我一直在使用 mt_rand(10,100) 来获取 10 到 100 之间的随机数,但它每次都给我 74。

这就是我正在使用的东西

$success=mt_rand(10,100);

有什么想法吗?我需要以某种方式播种吗?提前致谢。

---编辑---

我刚试过这个

    srand(microtime());
    $success=rand(10,100);

每次都给出相同的答案,47。

---编辑---

这就是全部

srand(microtime());
$success=rand(10,100);
echo $success;
if ($success == 100) {
    $displayline="You succeeded";
    session_register("displayline");
    header("location:userhome.php");
}

【问题讨论】:

  • 您可能需要显示更多代码。正如我预期的那样,我在循环中运行它并收到许多不同的随机数。事实上,在 50 个循环中,我没有收到 1 个74。这是在 PHP 5.3 上
  • 您使用的是哪个版本的 PHP?您是否手动为生成器播种?
  • 我认为它正在某个地方被重置。您是否有忘记删除的测试用例?
  • 我必须同意@nikic,我敢说你用固定号码拨打mt_srand。从 php v4.2.0 开始,不需要为随机数生成器播种。
  • 潜在相关:xkcd.com/221

标签: php random seed


【解决方案1】:

您运行的是什么版本的 PHP?在 4.2.0 中,mt_rand() 被更改为自动播种。

您可以使用 mt_srand($seed) 为其播种,提供种子值。我使用 microtime() 函数的输出。

编辑:由于您使用的是 5.2,请检查您的代码以查看是否正在调用 mt_srand() 并注释掉所有此类调用。

【讨论】:

  • @Trent:你确定你为生成器播种了吗?
  • @Trent 在这种情况下,您需要显示更多代码。这可能是你没有看到的东西。或者,您是否在另一个系统上尝试过该代码?
【解决方案2】:

这很奇怪。如果你只做mt_rand() 你会得到什么? mt_getrandmax() 的值是多少?

尝试使用mt_srand() 播种

【讨论】:

    【解决方案3】:

    它自己播种。

    http://www.suspekt.org/2008/08/17/mt_srand-and-not-so-random-numbers/

    你应该检查你的 PHP 版本

    【讨论】:

      【解决方案4】:

      删除所有种子功能,不要重新添加它们。然后重新启动服务器。

      另外,我发现了this PHP bug,它出现在带有某些版本的 php.ini 文件的 Windows 系统上。

      【讨论】:

      • @Trent 你知道是什么原因造成的吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 2019-12-19
      • 1970-01-01
      相关资源
      最近更新 更多