PHP头已经发送错误,不是空白错误

这个问题在这里已经有了答案:

  • 如何解决PHP 11中的“Headers already sent”错误

  • 该错误实际上是第二次添加任何输出(包括空白,或在这种情况下,标记),您不能再调用头。 作为测试 - 暂时将标题行注释掉。 你会看到你的代码工作。

    header("Location:/".$group_url."&".$fname_key);

    如果您发送了其他内容,将永远崩溃您的代码。 评论它来证明这一点。 你的代码会神奇地开始工作,直到你取消注释为止。

    很可能,您需要重新设计代码,以发送html( <div><span>等)或调用header()函数,但不能同时使用两者。 另一种方法是在代码中移动头文件EARLIER,以便在其他任何东西之前执行WAY。 那么,当然,你会想要停止执行(因为你要求重定向。)

    浏览器如何工作

    为了理解为什么这是一个问题 - 为什么在发送内容(比如HTML)之后你不能发送头文件,想一想浏览器如何看到数据包:

    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: 28
    
    <div><span>text</span></div>
    

    标题是前三行。 之后,两辆马车返回,然后返回车身。 通过首先发送html,它会强制php计算标题(包括,最重要的是,内容长度!)。然后,发送标题。 你现在正在发送身体。 因此,稍后通过调用header() ,添加另一个标头,您可以要求php及时返回并取消标头,这当然是......它无法做到的。


    从PHP自己的手册(http://php.net/manual/en/function.header.php):

    请记住,必须在发送任何实际输出之前调用header(),或者通过普通的HTML标记,文件中的空行或来自PHP。 使用include或require函数或其他文件访问函数读取代码,并在调用header()之前输出空格或空行是非常常见的错误。 使用单个PHP / HTML文件时存在同样的问题。

    <html>
    <?php
    /* This will give an error. Note the output
     * above, which is before the header() call */
    header('Location: http://www.example.com/');
    exit;
    ?>
    
    链接地址: http://www.djcxy.com/p/69671.html

    上一篇: PHP header already sent error, not a whitespace error

    下一篇: getting a error message from my php