防止'标头已发送'

时间:2013-08-31 12:01:38

标签: php redirect header

当您尝试将具有标题:位置的用户重定向到页面上已有“输出”的其他页面时,PHP将显示消息:标题已发送。

创建一个函数是一个很好的解决方案,并在任何需要的地方调用该函数(即使在页面底部)?

谢谢!

示例:

function redirectMe($location){
    header('Location:'.$location);
}

//HTML

//Redirect user:
redirectMe('http://www.google.com');

3 个答案:

答案 0 :(得分:2)

不,这不起作用,因为您已经通过调用该函数来输出HTML。

如果要使用重定向,则必须在将ANYTHING输出给用户之前。在输出任何内容之前检查变量,要么是这样做,要么就是这样,或者决定不重定向用户 - 然后输出所有的HTML。

编辑:尽管如此,如果你无法弄清楚如何检查重定向/停留的条件,你可以把所有的HTML放到一个字符串中,然后在页面的末尾回显它 - 但是好的,这样做比检查正确的条件并从那里开始要多得多。

答案 1 :(得分:2)

一个好的解决方案是使用ob_start()ob_end_clean()

ob_start();
// all your PHP/HTML codes go there.
$output = ob_get_contents();
ob_end_clean();

更多http://php.net/manual/en/function.ob-start.php

答案 2 :(得分:2)

如果在执行重定向的头功能之前有任何内容输出到浏览器,则会给出已发送的头文件错误。如果不需要向用户显示输出,则可以在页面开头使用ob_start()函数来缓冲发送到浏览器的输出并在标题后使用ob_flush。您可以根据页面流程使用它