我正在尝试生成一个随机数(介于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);
}
答案 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; ?>