正如我们所知,PHP中的header()
函数会导致错误输出,除非在HTML内容之前发送,因此不要使用输出缓冲或更糟糕的是,抑制已发送的着名"标题&#34 ;错误,我正在考虑使用HTML内容重定向作为替代。例如:
if($userRegister){ ?>
<meta http-equiv="refresh" content="0; URL=success.php" />
<?php }
由于我没有看到这种方法,我想知道我遗漏了一些东西。因为它似乎是一种非常好的页面重定向方法
答案 0 :(得分:2)
这不是必需的,但我建议做这样的事情:
if($userRegister){ ?>
<script type="text/javascript">location.href="success.php";</script>
<noscript><meta http-equiv="refresh" content="0; URL=success.php" /></noscript>
<?php }
答案 1 :(得分:1)
请参阅:Is it good practise to use meta refresh tags for redirects instead of header() function in php?
这两种方法都有起伏不定。在我看来,最好使用header()
,因为它会向客户端发送较小的有效负载,并且不会导致浏览器加载另一个页面的DOM产生副作用。
答案 2 :(得分:1)
我个人会使用headers_sent
而不是检查特定变量,因为这就是为什么函数是在第一时间创建的
if (headers_sent()) {
echo '<meta http-equiv="refresh" content="0; URL=success.php" />'
}
我还建议创建重定向方法,这样您就不必每次都在代码的不同部分测试标题
function redirect($target) {
if (headers_sent()) {
echo "<meta http-equiv=\"refresh\" content=\"0; URL={$target}\" />";
} else {
header("Location: {$target}");
}
exit;
}
答案 3 :(得分:0)
您已使用元刷新作为标头位置的替代方法。它是正确的,但在我看来你应该使用标题重定向,如果你想删除header already sent
错误,你应该使用ob_start()
和ob_flush()
并打开输出缓冲你的PHP .ini如果它关闭了。