-2

当您尝试使用 Header:Location 将用户重定向到另一个页面时,当页面上已经有“输出”时,PHP 将显示消息:标头已发送。

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

谢谢!

例子:

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

//HTML

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

3 回答 3

2

不,这行不通,因为在调用函数时您已经输出了 HTML。

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

编辑:不过,以一种非常可怕的方式,如果您不知道如何检查重定向/停留的条件,您可以将所有 HTML 放入一个字符串中,然后在页面末尾回显它 - 但是老天,这样做比检查正确的条件并从那里开始工作要多得多。

于 2013-08-31T12:03:57.207 回答
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 ‎</p>

于 2013-08-31T12:04:19.750 回答
2

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

于 2013-08-31T12:05:41.177 回答