猿问

PHP错误:无法修改标头信息 - 已发送的标头

所以我在我的页面上有这个输出..不明白为什么我弹出它。我是php的新手,所以也许这很容易解决


- 我有一个header.php文件,其中包含所有重要信息,以及页面的横幅。这个header.php包含在每个页面上。


- 我让它检查会话值,以确保允许用户在某个页面。如果不允许用户在那里,我会将他们踢回登录页面


这是错误出现的地方。这就是我所拥有的:


include_once ("header.php");


if ($_SESSION['uid']!='programmer')

{                        

header('Location: index.php');

echo 'you cannot be here';

exit;

}   

它重定向到的索引也有标题。那么这些多个标题引用会给我这个错误吗?我认为没有其他方法可以做到这一点,这让我疯了!


蛊毒传说
浏览 818回答 3
3回答

www说

header()一旦将文本输出到浏览器,就无法使用。由于您的header.php包含可能输出HTML,header()因此无法使用。您可以通过以下几种方式解决此问题:将if语句移到标题include上方(这不起作用,正如您在注释中指出的那样header.php设置了uid会话和其他重要内容)。ob_start()在脚本顶部调用以缓冲输出。

叮当猫咪

发送任何其他内容后,您无法发送任何标头。很可能是罪魁祸首是?>header.php中结束标记后的额外空格。在任何仅限脚本的php文件中完全省略结束标记通常是一种很好的做法。您的错误应该告诉您发送输出的确切行(以及哪个文件)。

喵喵时光机

我遇到了一个类似的错误(也似乎无处不在)关于Redirect函数,它曾经如下:function Redirect($url) {        flush(); // Flush the buffer        header("Location: $url"); // Rewrite the header        die;    }显然,您还需要添加ob_flush();以完全清除旧标头。新功能是:function Redirect($url) {        flush(); // Flush the buffer        ob_flush();        header("Location: $url"); // Rewrite the header        die;    }希望这可以帮助别人解决这个问题!
随时随地看视频慕课网APP
我要回答