php flush()即使没有内容也会触发头文件\u sent()

php flush()即使没有内容也会触发头文件\u sent(),php,Php,php中的headers_sent()函数在我的目标服务器上不起作用。即使在有回音的情况下,它也不会评估为真。这可以通过更改php.ini中的输出缓冲值来解决,但不幸的是,我没有访问权限。本文中提到的解决方法是使用flush()函数 但是,在使用flush()时,headers_sent()函数的计算结果始终为True。这是因为flush()会像lafor指出的那样发送头+内容(如果有) <?php flush(); if(headers_sent()) echo 'headers

php中的headers_sent()函数在我的目标服务器上不起作用。即使在有回音的情况下,它也不会评估为真。这可以通过更改php.ini中的输出缓冲值来解决,但不幸的是,我没有访问权限。本文中提到的解决方法是使用flush()函数

但是,在使用flush()时,headers_sent()函数的计算结果始终为True。这是因为flush()会像lafor指出的那样发送头+内容(如果有)

<?php
flush();
if(headers_sent())
    echo 'headers were sent';
//will output 'headers were sent'

你这样做的目的是什么?再多解释一点可能有助于我们理解上下文


如果需要输出缓冲,可以跳过php.ini函数,只使用ob_start();还有像ob_get_clean()这样的函数;返回内容而不输出

描述了缓冲可能导致在预期情况下不发送输出的许多情况。另见。flush()函数应该将“所有内容”发送到浏览器,其中包括HTTP头。然而,从我读到的内容来看,即使没有其他输出,也不清楚是否发送了头。根据您报告的经验,我推测,至少对于您的服务器(可能还有浏览器),不管是否有其他输出,都会刷新头。

当打开输出缓冲时,头在刷新输出之前不会被发送,因此
头文件\u sent()
在正确之前返回
false
flush()。我看不出这个函数是如何“不工作”或“无用”的


如果您的目的是检查是否有任何头被设置为发送(使用
header()
函数,在没有输出缓冲的情况下,该函数也会立即发送头),您可能需要查看或注册自定义回调。

谢谢!我使用了:
if(strlen(ob_get_contents())>0)echo'content was output'如果(!empty(ob_get_contents())回显“stuff”,您也可以这样做;从技术上讲,这会更快速、更准确地达到您的目的,但在这种情况下会产生几乎相同的结果。您是对的。现在我意识到我使用的是headers_sent()检查是否有任何内容被输出。我将其与标题混淆。是的,你是对的!从我的测试和lafor的回答确认,无论内容如何,标题都会被发送。我还可以补充,这不受浏览器的影响,因为这将发生在服务器端。