为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
蛊毒传说 2019-09-06 16:11:38
所以我在我的页面上有这个输出..不明白为什么我弹出它。我是php的新手,所以也许这很容易解决- 我有一个header.php文件,其中包含所有重要信息,以及页面的横幅。这个header.php包含在每个页面上。- 我让它检查会话值,以确保允许用户在某个页面。如果不允许用户在那里,我会将他们踢回登录页面这是错误出现的地方。这就是我所拥有的:include_once ("header.php");if ($_SESSION['uid']!='programmer'){                        header('Location: index.php');echo 'you cannot be here';exit;}   它重定向到的索引也有标题。那么这些多个标题引用会给我这个错误吗?我认为没有其他方法可以做到这一点,这让我疯了!
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

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


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


将if语句移到标题include上方(这不起作用,正如您在注释中指出的那样header.php设置了uid会话和其他重要内容)。

ob_start()在脚本顶部调用以缓冲输出。


查看完整回答
反对 回复 2019-09-06
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

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


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


查看完整回答
反对 回复 2019-09-06
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我遇到了一个类似的错误(也似乎无处不在)关于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;

    }

希望这可以帮助别人解决这个问题!


查看完整回答
反对 回复 2019-09-06
  • 3 回答
  • 0 关注
  • 817 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信