php headers_sent函数无效

时间:2010-10-13 17:12:05

标签: php http-headers header echo

<h1>Header</h1>
<?php
echo 'teste'; // output here
echo headers_sent(); // no output here!
?>

为什么在这种情况下header_sent()不输出? 谢谢。

3 个答案:

答案 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,则可能会发生这种情况。