正如我们所知,PHP中的header()
函数会导致错误输出,除非在HTML内容之前发送,所以不是使用输出缓冲,或者更糟的是,抑制著名的"headers already sent "错误,我正在考虑使用HTML内容重定向作为替代方案。例:
if($userRegister){ ?>
<meta http-equiv="refresh" content="0; URL=success.php" />
<?php }
由于我还没有看到这种方法,我想知道我错过了什么。因为这似乎是页面重定向的好方法
这不是必需的,但我建议这样做:
if($userRegister){ ?>
<script type="text/javascript">location.href="success.php";</script>
<noscript><meta http-equiv="refresh" content="0; URL=success.php" /></noscript>
<?php }
参见:在php中使用元刷新标签重定向而不是header()函数是好的做法吗?
两种方法各有优缺点。
在我看来,最好使用header()
,因为它发送一个较小的负载到客户端,它不会造成副作用,从浏览器加载另一个页面的DOM
我个人会使用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;
}
您已经使用元刷新作为标题位置的替代方法。这是对的,但在我看来,你应该使用头重定向,如果你想删除header already sent
错误,你应该使用ob_start()
和ob_flush()
,并打开输出缓冲你的php.ini,如果它是关闭的。