<h1>Header</h1>
<?php
echo 'teste'; // output here
echo headers_sent(); // no output here!
?>
为什么在这种情况下header_sent()不输出? 谢谢。
答案 0 :(得分:4)
查看你的php.ini配置文件并查找包含output_buffering
的行,并确保它看起来像:
output_buffering = Off
如果您将其关闭,则echo headers_sent()
应输出1
如果你有它然后echo headers_sent()
将不会输出任何内容,因为在这种情况下headers_sent()将返回FALSE,因为标题(不是HTML <h1>
但不是HTTP响应头)尚未发送因为输出是缓冲的。
要强制发送标头和输出回显到目前为止,您可以致电flush()
答案 1 :(得分:2)
因为它返回true或false。
var_dump(headers_sent());
应显示(下面的一个或另一个)
bool(true)
bool(false)
它正在工作,它只是不输出文本,如果它是假的,因为它不是文本它是boolean
值。此函数的一般用途是if语句,而不是显示语句,如果要显示它只需使用ternary operator
echo (headers_sent())?'true':'false';
修改强>
感谢Victor纠正我:如果为真,它将返回1,如果为假则返回空字符串。
<强>更新强>
为什么headers_sent()
会返回false?那么澄清我将从手册中发布:
headers_sent - 检查是否或在何处 标题已发送
基本上,当你有任何输出时,会自动将标题发送到浏览器并启动正文。例如:
<?php
echo "test";
echo headers_sent(); // should yield 1
?>
那应该显示1,因为我们有headers_sent
调用的echo语句。
<?php
echo headers_sent(); // should yield empty string
?>
如果在headers_sent()调用之前没有输出,那将显示一个空字符串。上面的假定表示output_buffering已关闭。与output_buffering
一样,它保存所有输出,直到脚本完成处理然后显示该输出,因此在脚本结束时发送标题/正文标记。
希望能够清除它。如果没有,请参阅我上面发布的手册链接,并阅读手册中的示例。
答案 2 :(得分:0)
如果在您执行的代码被执行之前调用ob_start
,则可能会发生这种情况。