headers_sent () возвращает false, но заголовки отправлены

Мой код прост:

<!DOCTYPE html> <html> <head> ... <?php var_dump(headers_sent()); ?> 

Он возвращает false. Не следует ли отправлять заголовки сразу после печати? Как сразу после первого символа.

Это зависит от вашей директивы output_buffering в файле php.ini . Если это Off

output_buffering = Off

то echo headers_sent() должен выводить 1

В других случаях headers_sent() не будет выводить никаких результатов, потому что это будет FALSE. Заголовки не будут отправляться, потому что вывод буферизирован.

Если вы хотите обойти это и форсировать отправку заголовков, вы можете использовать flush() .

Надеюсь это поможет!

Прочитайте комментарии в документах!

Здесь, например: http://es1.php.net/manual/en/function.headers-sent.php#75835

Он делает большую экспозицию: P

редактировать

Да, headers_sent () вернет false, даже если вы отправили что-то в Ouptut, используя print () или header (), если output_buffering отличается от Off в php.ini, а длина отправляемого вами не превышает размер вывода. […] Это замечается в комментарии php.ini: «Буферизация вывода позволяет отправлять строки заголовков (включая файлы cookie) даже после отправки содержимого тела в цене медленного замедления выходного уровня PHP».

Мне удалось найти способ без деактивации output_buffering:

 if (!headers_sent() && !ob_get_contents()) { // do your thing }