【问题标题】:Opening page using a PHP header with random ID works on Edge but not chrome使用带有随机 ID 的 PHP 标头打开页面适用于 Edge,但不适用于 chrome
【发布时间】:2018-12-02 22:35:07
【问题描述】:

我正在尝试生成一个随机数(介于 1 到 151 之间),以便我可以根据随机生成的 ID 打开一个页面。这里的问题在于浏览器兼容性,因为预期的功能适用于 Edge,但不适用于 Chrome 或 FireFox。

pokedex.php:

<form action='randomPokemon.php' >
    <button type="submit" class="toolsBtn">Random</button>
</form>

随机Pokemon.php:

<?php
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'pokedex.php?pid=';
$randomid = rand(1, 151);
header("HTTP/1.1 303 See Other");
header("Location: http://$host$uri/$extra" . mt_rand(1, 151));
unset($randomid);
exit;
?>

现场演示:http://fraserprovan.co.uk/projects/pokedex/pokedex.php

我不知道为什么它可以在 Microsoft Edge 而不是其他浏览器上运行。在 chrome 上,它每次都会打开相同的页面,就好像变量 $randomid 没有改变一样。任何建议或其他资源的链接将不胜感激。

更新: 决定用 Javascript 来代替使用以下函数,感谢您的建议。

function randomPokemon(){
    var randomNum = Math.floor(Math.random() * 151) + 1;  
    document.location.replace('pokedex.php?pid=' + randomNum);
}

【问题讨论】:

  • 当我在 Chrome 和 Firefox 中尝试时,得到的结果和你一样。确实很奇怪。
  • 我不知道在边缘使用它有什么区别,我挠头。
  • 调用randomPokemon.php 时,URL 会按预期更改为pokedex.php。即使我使用 randomPokemon.php 粘贴 URL,也会发生这种情况。
  • 您是否尝试过记录生成的随机数以确保 PHP 中没有异常?我越来越奇怪,但非常可重复的行为。单击Random 时我总是得到#82,但如果我使用location.href = "http://fraserprovan.co.uk/projects/pokedex/randomPokemon.php" 从控制台访问页面,我总是得到#39。
  • 您如何推荐日志记录?我知道如何在 javascript 中写入控制台,但在 php 中不知道

标签: php html


【解决方案1】:

尝试使用 absolute URI,也不要在 header-statement 之前留下 任何空格或换行符。请参阅php-docs的此注释

注意:

大多数当代客户端都接受相对 URI 作为 » 位置:,但一些较旧的客户端需要一个绝对 URI,包括 方案、主机名和绝对路径。你通常可以使用 $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] 和 dirname() 来自相对人的绝对 URI:

<?php
/* Redirect to a different page in the current directory that was requested */
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
?>

【讨论】:

  • 我更新了 randomPokemon.php: 代码。谢谢你的提示。我用更新的代码更新了原始帖子。不幸的是,同样的错误正在发生。
  • 试试这个:header("位置:http://$host$uri/$extra" .mt_rand(1, 151));而不是 $randomid = rand(1, 151);如果它不起作用,请尝试使用固定号码并让我发布。
  • 更新了这行代码,同样的问题。另一个用户提到缓存,我只是想了解它是如何工作的。可能是问题所在。
  • 我可以看到它现在可以在 chrome 上运行,您是如何修复的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多