我的代码很简单:
<!DOCTYPE html>
<html>
<head>
...
<?php var_dump(headers_sent()); ?>
它返回假。打印后不应该立即发送标题吗?就像在第一个<
字符之后一样。
我的代码很简单:
<!DOCTYPE html>
<html>
<head>
...
<?php var_dump(headers_sent()); ?>
它返回假。打印后不应该立即发送标题吗?就像在第一个<
字符之后一样。
这取决于您的output_buffering
指令是否在php.ini
文件中。如果是Off
output_buffering = Off
那么echo headers_sent()
应该输出1
在其他情况下,headers_sent()
不会输出任何结果,因为它将为 FALSE。由于输出已缓冲,因此不会发送标头。
如果您想解决这个问题并强制发送标头,您可以使用flush()
.
希望这可以帮助!
阅读文档中的评论!
这里例如: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 的输出层。”
我设法找到了一种不停用 output_buffering 的方法:
if (!headers_sent() && !ob_get_contents()) {
// do your thing
}