4

我的代码很简单:

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

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

它返回假。打印后不应该立即发送标题吗?就像在第一个<字符之后一样。

4

3 回答 3

4

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

output_buffering = Off

那么echo headers_sent()应该输出1

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

如果您想解决这个问题并强制发送标头,您可以使用flush().

希望这可以帮助!

于 2013-07-11T08:38:09.933 回答
2

阅读文档中的评论!

这里例如:http ://es1.php.net/manual/en/function.headers-sent.php#75835

他做了一个很棒的说明:P

编辑

是的,headers_sent() 将返回 false,即使您使用 print() 或 header() 将某些内容发送到 ouptut,如果 output_buffering 与您的 php.ini 中的 Off 不同,并且您发送的内容的长度不超过大小输出缓冲。[...] php.ini 注释中注意到了这一点:“即使在发送正文内容之后,输出缓冲也允许您发送标题行(包括 cookie),但代价是稍微减慢了 PHP 的输出层。”

于 2013-07-11T08:35:04.920 回答
0

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

if (!headers_sent() && !ob_get_contents()) {
    // do your thing
}
于 2016-11-16T10:46:17.683 回答