标题vs内容重定向


header vs content redirect

正如我们所知,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,如果它是关闭的。