headers_sent()返回false,但标题已发送

时间:2013-07-11 08:27:18

标签: php html http-headers

我的代码很简单:

<!DOCTYPE html>
<html>
  <head>
    ...

   <?php var_dump(headers_sent()); ?>

返回false。在打印某些内容后,不应立即发送标题吗?就像在第一个<字符之后。

3 个答案:

答案 0 :(得分:4)

这取决于output_buffering文件中的php.ini指令。如果是Off

output_buffering = Off

然后echo headers_sent()应输出1

在其他情况下,headers_sent()将不会输出任何结果,因为它将为FALSE。由于输出是缓冲的,因此不会发送标头。

如果你想绕过这个并强制发送标题,可以使用flush()

希望这有帮助!

答案 1 :(得分:2)

阅读文档中的评论!

此处,例如:http://es1.php.net/manual/en/function.headers-sent.php#75835

他做了很好的阐述:P

修改

  

是,   headers_sent()将返回false,即使你使用print()或header()向ouptut发送了一些东西,如果你的php.ini中的output_buffering与Off不同,你发送的长度也不会超过output_buffering的大小。   [...]   这在php.ini评论中注意到:   “输出缓冲允许你发送标题行(包括cookie),即使在发送正文内容之后,也会使PHP输出层的速度变慢一些。”

答案 2 :(得分:0)

我设法找到了一种不停用output_buffering的方法:

if (!headers_sent() && !ob_get_contents()) {
    // do your thing
}