PHP警告:头文件已经在Unknown中发送

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

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

  • 原来是这条线

    ob_start("ob_gzhandler");
    

    导致警告。 这在2001年已经被报道和修复,似乎,但由于某种原因它不断回来。


    它可能是很多东西,但正如其他人所说的那样,它通常只是一个位于输出位置的空间,然后发送一个通常很好的header()命令,而不是在开始发送内容之后(可能只是在这种情况下是一个空间)。

    使用ob_start()可以通过缓冲来立即停止输出。 所以这是一个潜在的解决方案,或者至少可以从Zodeus说的那样来诊断它的来源。


    在这种情况下,导致那些损失空间的常见事件就是这样。

    global.php

    <?php
      $variable = 1;
      $database = 'something else';
    ?> <-- A space here
     <-- Or here
    

    的index.php

    <?php
    
      require('global.php');
      $var = dosomething();
      header('Location: http://www.example.com/');
    
    ?>
    

    解决这个问题的一种方法是删除global.php文件末尾的?>。 你不需要这些,只有当你开始在你的PHP代码后面放置HTML时才有用。 所以你会有:

    <?php
      $variable = 1;
      $database = 'something else';
    

    而当你做require() ,空间不会在header()之前输出。


    只是为了说明输出内容和标题的问题,是另一种常见的情况,它会给出类似的错误。 当您使用header()重定向后忘记停止处理时,会发生这种情况。

    if ($notLoggedIn) {
      header('Location: http://www.example.com/login.php');
    }
    echo 'Welcome to my website'; // this will be outputted, 
                                  // you should have an exit() 
                                  // right after the header()
    

    我认为最近发生的事情之一是内置的PHP函数正在输出一些东西。 我已经看到这与几个IMAP功能,他们只出了一个“”(空格字符),它把事情搞砸了。 你可以使用Xdebug或者Zend调试器来追踪它,但是如果你没有尝试对你认为可能导致它的一些函数进行包装输出缓冲。

    ob_start();
    callYourFunction();
    ob_end_clean();
    

    一次执行这个功能,当错误消失时,您会知道哪个功能导致了您的问题,然后您可以提交错误报告或将其作为黑客入侵。 但至少你知道哪个功能导致了这个问题。

    编辑:事实是说你的输出发生在第0行意味着它是一个C级功能做输出,而不是使用PHP编写的任何代码。

    链接地址: http://www.djcxy.com/p/34679.html

    上一篇: PHP warning: headers already sent in Unknown

    下一篇: Why would one omit the close tag?