-1

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

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

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

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

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

4

4 回答 4

1

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

于 2012-06-25T22:37:22.900 回答
0

您可以为标题功能添加@

@header("Location: $url");

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

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

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

最好的问候,Zhirayr G.

于 2012-06-25T23:37:39.480 回答
0

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

是否将其放入函数中并不重要,它必须在任何内容输出到浏览器之前出现。

另外,为什么要flush()包含此功能?这也可能使重定向无法正常工作。

于 2012-06-25T22:37:23.247 回答
0

我相信

ob_end_clean();

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

于 2012-06-25T22:46:57.067 回答