使用带有随机ID的PHP标头打开页面在Edge上有效,但在Chrome上不行

时间:2018-06-23 21:05:21

标签: php html

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

pokedex.php:

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

randomPokemon.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);
}

1 个答案:

答案 0 :(得分:0)

尝试改用绝对 URI,也不要在标头语句前留下任何空格或换行。请参阅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;
?>