【问题标题】:PhP Headers and output bufferingPhP 标头和输出缓冲
【发布时间】:2012-09-11 19:16:54
【问题描述】:

所以...如果您有一个说明类似内容的脚本...

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,它会继续运行脚本吗?我有一个问题,如果在我的数据库中找到标题,它将返回错误,但它会继续运行该脚本,从而将重复的标题条目插入到我的数据库中。

再说一遍……即使您发送了标头,脚本还会继续执行吗?又名(在这种情况下)重定向?

【问题讨论】:

    标签: php header buffer ob-start


    【解决方案1】:

    如果发送 location 标头而没有 exit 是的,它会继续运行脚本。

    有效:

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

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

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

    【讨论】:

    • 另一个快速的问题......我想在我的脑海里我明白这个答案;但是,即使脚本继续执行,当我放置 echo "Testing" 时,我也没有在页面上的任何地方看到该输出。我假设这与它首先发送标头并忽略所有输出有关,但仍在运行脚本;我说的对吗?
    • 修改了我的答案,你现在应该明白了。
    • 看到你的编辑...我会在允许的时候检查它,再过 4 分钟,再次感谢。
    【解决方案2】:

    会的,所以在发送标头后退出你的脚本

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      相关资源
      最近更新 更多