php headers_sent函数不起作用

问题描述:

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

为什么headers_sent()在这种情况下不输出? 谢谢。php headers_sent函数不起作用

因为它返回true或false。

var_dump(headers_sent()); 

应该出现(一个或下面)

bool(true) 
bool(false) 

这是工作,它只是不会输出文本,如果是假的因为它不是文本它是值为boolean。这个函数的一般用途是为一个if语句,不显示语句,如果你想显示它简单地使用ternary operator

echo (headers_sent())?'true':'false'; 

编辑

感谢维克多指正:它如果为true,则返回1;如果为false,则返回空字符串。

更新

为什么headers_sent()返回假的?嗯澄清,我将发布从手动:

headers_sent - 检查或者 头已被送往

基本上,当你有任何输出,自动发送头到浏览器和开始身体。例如:

<?php 
echo "test"; 
echo headers_sent(); // should yield 1 
?> 

这应该显示1,因为我们对headers_sent呼叫有一个回声声明。

<?php 
echo headers_sent(); // should yield empty string 
?> 

这将显示一个空字符串,因为在headers_sent()调用之前没有输出。以上假定 output_buffering关闭。与output_buffering一样,它会保存所有输出,直到脚本完成处理,然后显示该输出,从而在脚本的末尾发送标头/主体标签。

希望清除它。如果没有,请参阅上面张贴的手动链接,并阅读手册中的示例。

+0

转换TRUE;一个字符串应该产生'1' ...没有输出的表示该函数返回'FALSE'(其产生一个空字符串)。 – 2010-10-13 17:18:17

+0

true value以这种方式打印:'1' – thomas 2010-10-13 17:18:41

+0

var_dump(headers_sent()); =='bool(false)' – thomas 2010-10-13 17:20:47

如果在显示的代码执行之前调用了ob_start,则可能发生这种情况。

+0

ob_start未被调用...这是整个代码。 – thomas 2010-10-13 17:19:11

看看你的php。INI配置文件并查找包含output_buffering线,并确保它看起来像:

output_buffering = Off

如果您有它关闭,然后echo headers_sent()应该输出1

如果你拥有了它,然后echo headers_sent()不会输出因为header_sent()在这种情况下将返回FALSE,因为头文件(意味着不是HTML <h1>但是HTTP响应头文件)还没有被发送,因为输出被缓冲了。

要强制发送消息头和输出回波编辑到目前为止,您可以拨打flush()

+0

output_buffering = 4096 – thomas 2010-10-13 17:24:54

+0

你说得对。这个指令的后果是什么? – thomas 2010-10-13 17:27:48

+0

如果它关闭并且你没有调用ob_start(),那么首先回显(或打印或任何其他导致输出的命令)将开始向客户端浏览器输出响应,使您无法使用更改http头(如header()或setcookie() - 调用这些函数将导致错误“标题已发送” – 2010-10-13 17:29:40