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

Mar*_*cus 11 php header

可能重复:
PHP已发送的标头

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

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

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

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

include_once ("header.php");

if ($_SESSION['uid']!='programmer')
{                        
header('Location: index.php');
echo 'you cannot be here';
exit;
}   
Run Code Online (Sandbox Code Playgroud)

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

cee*_*yoz 32

header()一旦将文本输出到浏览器,就无法使用.由于您的header.php包含可能输出HTML,header()因此无法使用.

您可以通过以下几种方式解决此问题:

  • 将if语句移到标题include上方(这不起作用,正如您在注释中指出的那样header.php设置了uid会话和其他重要内容).
  • ob_start()在脚本顶部调用以缓冲输出.

  • 另请注意,除非您正在缓冲输出,否则在启动php标记之前甚至只有一个空行(或空格?)会遇到此错误,因为即使是空格也会计为输出以确定是否可以发送标题. (4认同)

Que*_*tin 6

如果header.php文件"具有横幅",那么它可能会向页面输出一些HTML内容.

输出内容后,您无法发出HTTP标头.


kei*_*ant 6

发送任何其他内容后,您无法发送任何标头.很可能是罪魁祸首是?>header.php中结束标记后的额外空格.在任何仅限脚本的php文件中完全省略结束标记通常是一种很好的做法.

您的错误应该告诉您发送输出的确切行(以及哪个文件).