【问题标题】:Cannot modify header information using a header.php file [duplicate]无法使用 header.php 文件修改标头信息 [重复]
【发布时间】:2012-06-25 22:33:10
【问题描述】:

我有一个 header.php 文件,它包含在网站的每个页面上,它包含信息和开始标记等内容。

现在,每当我尝试从站点上的另一个页面发送标题信息时,我都知道我不能这样做,因为我已经将 HTML 发送到客户端计算机。所以我在谷歌搜索后创建了一个函数并将其粘贴在 Header.php 文件的顶部:

   ob_start();
function redirect($url){
    flush();
    ob_flush();
    header("Location: $url");
    die;
}

我可以从网站的其他任何地方调用它,但我仍然收到错误消息。我可能做错了这个功能,但这就是谷歌有时会做的事情。任何解决此问题的帮助都会很棒,谢谢。

编辑:我得到的错误是“无法修改标头信息 - 标头已由...发送”。我已经解决了这个问题。

【问题讨论】:

  • ob_end_clean() 可能比冲洗更明智。但是我们真的不知道剩下的代码或用法,所以..
  • 您在 php 文件的开头是否有任何空白?根据我的经验,任何空白都可能导致此问题。

标签: php html header http-headers


【解决方案1】:

flush() 将缓冲区写入浏览器 - 与您想要的相反。拆下冲洗管线。如果要清除缓冲区,请查看http://us2.php.net/manual/en/function.ob-clean.php

【讨论】:

  • 谢谢,这修正了我的错误。
【解决方案2】:

你应该说你得到了什么“错误”,但是如果你在页面的任何地方包含这个函数,在任何东西输出到浏览器之后,你会得到一个“无法修改标题信息”的错误。

不管你是否把它放在一个函数中,它必须在任何东西被输出到浏览器之前。

另外,为什么你在这个函数中包含flush()?这也可能使重定向无法正常工作。

【讨论】:

    【解决方案3】:

    你可以只为标题函数添加@

    @header("Location: $url");
    

    但这不是很好的解决方案。

    当您向浏览器发送数据时,您还发送了带有 200 状态的标头,然后您尝试发送 302 状态(用于重定向),所以问题来自发送 200 状态。

    您可以在 http://en.wikipedia.org/wiki/List_of_HTTP_header_fields 阅读有关标头的更多信息

    最好的问候, 日雷尔 G.

    【讨论】:

      【解决方案4】:

      我相信

      ob_end_clean();
      

      是您正在寻找的功能。所以不要同时使用 flush() 和 ob_flush() 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-07
        • 2018-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多