php headers\u sent函数不工作 标题

php headers\u sent函数不工作 标题,php,http-headers,header,echo,Php,Http Headers,Header,Echo,为什么在这种情况下不输出头文件? 谢谢。因为它返回true或false <h1>Header</h1> <?php echo 'teste'; // output here echo headers_sent(); // no output here! ?> 应显示(下面的一个或另一个) 它正在工作,它只是不会输出文本,如果它为false,因为它不是文本,而是一个布尔值。此函数的一般用途是用于if语句,而不是显示语句,如果要显示它,只需使用三元运算符 boo

为什么在这种情况下不输出头文件?
谢谢。

因为它返回true或false

<h1>Header</h1>
<?php
echo 'teste'; // output here
echo headers_sent(); // no output here!
?>
应显示(下面的一个或另一个)

它正在工作,它只是不会输出文本,如果它为false,因为它不是文本,而是一个
布尔值。此函数的一般用途是用于if语句,而不是显示语句,如果要显示它,只需使用
三元运算符

bool(true)
bool(false)
编辑

感谢Victor纠正我的错误:如果为true,它将返回1,如果为false,则返回空字符串

更新

为什么返回错误?为了澄清,我将从手册中发布:

发送的标题-检查是否或在何处 标题已发送

基本上,当您有任何输出时,会自动将标题发送到浏览器并启动正文。例如:

echo (headers_sent())?'true':'false';
这将显示一个空字符串,因为在headers_sent()调用之前没有输出。以上假设输出缓冲已关闭。与启用
output\u buffering
一样,它保存所有输出,直到脚本完成处理,然后显示该输出,因此在脚本末尾发送头/体标记


希望这能把事情弄清楚。如果没有,请参阅我上面发布的手册链接,并通读手册中的示例。

如果在执行显示的代码之前调用了
ob\u start
,则可能会发生这种情况

查看php.ini配置文件,查找包含
output\u buffering
的行,确保它看起来像:

output\u buffering=Off

如果已关闭,则
echo headers\u sent()
应输出
1

如果启用了它,则
echo headers\u sent()
将不会输出任何内容,因为在这种情况下,headers\u sent()将返回FALSE,因为由于输出已缓冲,所以尚未发送头(意思不是HTML
,而是HTTP响应头)


到目前为止,要强制发送头和输出echo-ed,您可以调用
flush()

true
转换为字符串应产生
1
。。。如果没有输出,则表示函数返回了
false
(这将生成一个空字符串)。true值是这样打印的:“1”var\u dump(headers\u sent());=”bool(false)’对,正如Victor Nicolet所说,false产生一个空字符串,因此如果值为false,屏幕上将不会显示任何内容。如果您想要输出,请参阅我在上面发布的echo方法,以字符串形式显示
true
false
。好的,不显示false。我想知道为什么这个代码返回false。谢谢,你说得对。关闭此指令的后果是什么?如果它关闭并且您没有调用ob_start(),则first echo(或print或导致输出的任何其他命令)将开始向客户端浏览器输出响应,使您无法使用更改http头的函数,如header()或setcookie()-调用这些函数将导致错误“邮件头已发送“你说得对。我把它调好了,它开始工作了!关闭该指令会产生什么后果?该指令通常是关闭的,因此最好对其进行编码。它所做的只是将输出保存在缓冲区中,并等待脚本完成以立即显示所有内容。如果脚本编码正确,那么就不必担心输出缓冲是开还是关,因为它应该对这两种情况都起作用。
echo (headers_sent())?'true':'false';
<?php
echo "test";
echo headers_sent(); // should yield 1
?>
<?php
echo headers_sent(); // should yield empty string
?>