【问题标题】:header vs content redirect标头与内容重定向
【发布时间】:2014-08-20 08:49:31
【问题描述】:

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

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

由于我还没有看到这种方法,我想知道我缺少一些东西。因为它似乎是一个很好的页面重定向方法

【问题讨论】:

标签: php html http-headers


【解决方案1】:

这不是必需的,但我建议这样做:

if($userRegister){ ?>
<script type="text/javascript">location.href="success.php";</script>
<noscript><meta http-equiv="refresh" content="0; URL=success.php" /></noscript> 
<?php }

【讨论】:

    【解决方案2】:

    见:Is it good practise to use meta refresh tags for redirects instead of header() function in php?

    这两种方法都有其优缺点。

    在我看来,最好使用header(),因为它向客户端发送的负载较小,并且不会导致浏览器加载另一个页面的 DOM 时产生副作用。

    【讨论】:

      【解决方案3】:

      我会亲自使用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;
      }
      

      【讨论】:

        【解决方案4】:

        您已使用元刷新作为标题位置的替代方法。这是正确的,但在我看来,您应该使用标头重定向,如果您想删除 header already sent 错误,则应该使用 ob_start()ob_flush() 并打开缓冲 php.ini 的输出(如果它关闭)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-22
          • 2012-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多