PhP标头和输出缓冲

时间:2012-09-11 19:16:54

标签: php header buffer ob-start

所以......如果你有一个脚本说明这样的东西......

while($result = mysql_fetch_array($resource))
    {
        if($result['TITLE'] == $this->title)
        {
            header("LOCATION: profile.php?error=11");
        }
        echo 'testing';
    }

    //Create the database profile
    $second_query = "INSERT INTO profiles(USER_ID, KEYWORDS, TITLE, INTRO) ";
    $second_query .= "VALUES(".$this->userId.",'".serialize($this->keywords)."','".$this->title."','".$this->intro."')";
    echo $second_query;
    if($result = mysql_query($second_query))
    {
        if(isset($file))
        {
            $this->update_profile($this->files);    
        }
        return true;    
    }else
    {
        return false;   
    }

并且第一个条件失败并返回标头...如果在发送标头后没有返回false,它是否继续运行脚本?我有一个问题,如果在我的数据库中找到标题,它将返回错误,但它将继续运行该脚本,从而在我的数据库中插入重复的标题条目。

再次......即使你发送了一个标题,脚本会继续执行吗?又名(在这种情况下)重定向?

2 个答案:

答案 0 :(得分:3)

如果在没有location的情况下发送exit标头,则继续运行脚本。

有效:

header("Location: profile.php?error=11");
die(); // or exit();

认为header不由PHP本身执行,它由浏览器执行,同样的事情当你应用header("Content-Type: application/force-download");时它告诉浏览器必须下载以下输出块。

因此,即使您将标头设置为其他位置,除非我们退出,否则脚本中的所有代码都会被PHP处理,然后浏览器会获取该位置并重定向。

答案 1 :(得分:0)

是的,所以在发送标题后退出脚本

header("Location: profile.php?error=11"); 
exit;