如何在没有标题错误的情况下在PHP中重定向?

时间:2009-08-10 15:22:52

标签: php redirect header

如何在下面使用此设置重定向PHP而不会出现标题输出错误,我知道在设置标题之前没有任何内容可以打印到浏览器,我正在寻找解决方案,而不是解释为什么它会发生请

<?PHP
// include header
include ('header.inc.php');



// In my body section file if this is a page that requires a user be logged in then
// I run a function validlogin($url-of-page-we-are-on); inside of that file
//the function is below, it outputs a redirect to login page if not logged in

// include body of page we want
include ('SOME-FILE-HERE.php');



// include footer
include ('footer.inc.php');



// here is the function that is in the body pages, it is only called on a page that we require a logged in user so there are hundreds of pages that do have this and a bunch that don't, it's on a page to page basis
function validlogin($url) {
    if ($_SESSION['auto_id'] == '') {
        $msg = 'Please login';
        $_SESSION['sess_login_msg'] = $msg;
        $_SESSION['backurl'] = $url;
        $temp = '';
        header("Location: /");
        exit();
    }
}
?>

我想用php的头文件功能而不是元或javascript重定向

如果可能,还可以在此处维护需要登录的页面列表

7 个答案:

答案 0 :(得分:10)

在include之前的第一行使用ob_start()。所以你可以随时设置标题。

答案 1 :(得分:2)

你不能这样做:

<?php
validlogin($url); // call the function here
include ('header.inc.php');
include ('SOME-FILE-HERE.php');
include ('footer.inc.php');
?>

或者,将包含文件放在每个“SOME-FILE-HERE”类型的文件中(如果可能的话),最后得到:

<?php
validlogin($url); // call the function here
include ('header.inc.php');
?>

<h1>Page heading</h1>
...page content etc...

<?php
include ('footer.inc.php');
?>

答案 2 :(得分:2)

使用{ echo '<META HTTP-EQUIV="Refresh" Content="0; URL=process.php">';}

答案 3 :(得分:0)

只要在header()函数之前没有脚本输出,你应该没问题。检查没有回声或空格。同时将ob_start()放在开头可以提供帮助。有时会有不可见的空格 - 将文档的格式更改为ANSI或Unicode可能有所帮助!

作为一个注释(虽然我认为你已经知道)标题不会终止脚本所以exit()(你有)是一个明确的要求。

答案 4 :(得分:0)

footer.inc.php和SOME-FILE-HERE.php是否立即写入响应流?因为如果是这样,这将不起作用,因为在发送标题之前你已经写过了。

答案 5 :(得分:0)

您需要缓冲输出,以便不在第一个输出上发送HTTP标头。您可以通过启用ouput_buffering或通过调用ob_start显式缓冲任何输出。但后者必须在第一个输出之前调用,所以理想情况下在最初调用的脚本的第一行。

答案 6 :(得分:0)

正如其他人已经提到的那样,使用ob_start()output_buffer - 设置来缓冲输出。除此之外,从我的观点来看,在功能代码中输出内容并不是一个好的做法,但这是另一个主题。

您可以在Google或this Article about Output Buffering in PHP中找到更多信息。