当您尝试使用 Header:Location 将用户重定向到另一个页面时,当页面上已经有“输出”时,PHP 将显示消息:标头已发送。
创建一个函数并在需要的任何地方(甚至在页面底部)调用该函数是一个很好的解决方案吗?
谢谢!
例子:
function redirectMe($location){
header('Location:'.$location);
}
//HTML
//Redirect user:
redirectMe('http://www.google.com');
不,这行不通,因为在调用函数时您已经输出了 HTML。
如果你想使用重定向,它必须在 ANYTHING 输出给用户之前。在输出任何内容之前检查变量,要么这样做就是这样,要么决定不重定向用户 - 然后输出所有 HTML。
编辑:不过,以一种非常可怕的方式,如果您不知道如何检查重定向/停留的条件,您可以将所有 HTML 放入一个字符串中,然后在页面末尾回显它 - 但是老天,这样做比检查正确的条件并从那里开始工作要多得多。
一个好的解决方案是使用ob_start()和ob_end_clean()
ob_start();
// all your PHP/HTML codes go there.
$output = ob_get_contents();
ob_end_clean();
如果在执行用于重定向的标头函数之前有任何内容输出到浏览器,则会给出标头已发送错误。如果不需要向用户显示输出,您可以在页面开头使用 ob_start() 函数来缓冲输出,然后再发送到浏览器,并在标题后使用 ob_flush。您可以根据页面的流程使用它