【发布时间】:2013-07-11 08:27:17
【问题描述】:
我的代码很简单:
<!DOCTYPE html>
<html>
<head>
...
<?php var_dump(headers_sent()); ?>
它返回假。打印某些内容后不应该立即发送标题吗?就像在第一个 < 字符之后一样。
【问题讨论】:
-
如果你的输出缓冲则不行。
标签: php html http-headers
我的代码很简单:
<!DOCTYPE html>
<html>
<head>
...
<?php var_dump(headers_sent()); ?>
它返回假。打印某些内容后不应该立即发送标题吗?就像在第一个 < 字符之后一样。
【问题讨论】:
标签: php html http-headers
这取决于您的 output_buffering 指令是否在 php.ini 文件中。如果是Off
output_buffering = Off
那么echo headers_sent()应该输出1
在其他情况下,headers_sent() 不会输出任何结果,因为它将为 FALSE。由于输出已缓冲,因此不会发送标头。
如果您想绕过这个并强制发送标头,您可以使用flush()。
希望这会有所帮助!
【讨论】:
阅读文档中的 cmets!
这里例如:http://es1.php.net/manual/en/function.headers-sent.php#75835
他做了一个很棒的说明:P
编辑
是的, headers_sent() 将返回 false,即使您使用 print() 或 header() 将某些内容发送到 ouptut,如果 output_buffering 与您 php.ini 中的 Off 不同,并且您发送的内容的长度不超过 output_buffering 的大小. [...] 这在 php.ini 评论中注意到: “即使在发送正文内容之后,输出缓冲也允许您发送标题行(包括 cookie),但代价是稍微降低了 PHP 的输出层。”
【讨论】:
我设法找到了一种不停用 output_buffering 的方法:
if (!headers_sent() && !ob_get_contents()) {
// do your thing
}
【讨论】: