PHP错误:无法修改标题信息-标题已发送[重复]

vd8tlhqk  于 2023-10-15  发布在  PHP
关注(0)|答案(5)|浏览(126)

此问题已在此处有答案

How to fix "Headers already sent" error in PHP(16个回答)
8天前关闭
我有一个header.php文件,其中包括所有重要的信息,以及有网页的横幅。这个header.php包含在每个页面上。
我有它检查会话值,以确保用户被允许在某个页面。如果用户不允许在那里,我踢他们回到登录页面
这就是错误出现的地方。这就是我所拥有的:

include_once ("header.php");
                
if ($_SESSION['uid']!='programmer')
{                        
header('Location: index.php');
echo 'you cannot be here';
exit;
}

它重定向到的索引也有标头。那么,有这些多个头引用给我这个错误?

omvjsjqw

omvjsjqw1#

一旦文本输出到浏览器,就不能使用header()。由于header.php包含可能输出HTML,因此不能使用header()
你可以用几种方法来解决这个问题:

  • 将if语句移到头文件include的上方(这不起作用,正如您在注解中指出的,header.php设置uid会话和其他重要内容)。
  • 在脚本的顶部调用ob_start()来缓冲输出。
y4ekin9u

y4ekin9u2#

如果header.php文件“具有banner”,那么它可能会向页面输出一些HTML内容。
您不能在输出内容后发出HTTP标头。

kokeuurv

kokeuurv3#

您不能在发送任何其他内容后发送任何标题。一个很可能的罪魁祸首是在你的header.php中关闭?>标签后的额外空格。通常,在任何只包含脚本的php文件中完全省略结束标记是一个很好的做法。
你的错误应该告诉你到底是哪一行(以及哪个文件)在发送输出。

6xfqseft

6xfqseft4#

我遇到了一个类似的错误(似乎也是莫名其妙的),关于重定向函数,它曾经是这样的:

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;
    }

希望这能帮助其他有这个问题的人!

dldeef67

dldeef675#

好吧,就这么定了……不知道怎么回事,也许有人能解释一下为什么这会突然起作用。
这是我的代码:

include_once ("header.php");

if ($_SESSION['uid']!='programmer') {  
    if(isset($_SESSION['uid'])) {
        echo $_SESSION['uid'];
    }                           

    header('Location: index.php');
    exit;
}

让我重复一遍,现在一切正常!PHP.

相关问题