标头与内容重定向

时间:2014-06-30 02:55:58

标签: php html http-headers

正如我们所知,PHP中的header()函数会导致错误输出,除非在HTML内容之前发送,因此不要使用输出缓冲或更糟糕的是,抑制已发送的着名"标题&#34 ;错误,我正在考虑使用HTML内容重定向作为替代。例如:

if($userRegister){ ?>
   <meta http-equiv="refresh" content="0; URL=success.php" /> 
<?php }

由于我没有看到这种方法,我想知道我遗漏了一些东西。因为它似乎是一种非常好的页面重定向方法

4 个答案:

答案 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如果它关闭了。