<h1>Header</h1>
<?php
echo 'teste'; // output here
echo headers_sent(); // no output here!
?>
Почему headers_sent() не выводит в этом случае? Спасибо.Функция 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)
Он работает, он просто не будет выводить текст, если оно ложно, как это не текст это a boolean
значение. Общее использование этой функции предназначен для если заявление, а не показывая заявление, если вы хотите, чтобы отобразить его просто использовать ternary operator
echo (headers_sent())?'true':'false';
Редактировать
Благодаря Виктору для коррекции меня: Это вернет 1, если true, пустая строка, если false.
Update
Почему 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
, находящимся на нем, сохраняется весь вывод до завершения обработки сценария, а затем отображается этот вывод, поэтому тег заголовка/тела отправляется в конце скрипта.
Надеюсь, это очистит его. Если нет, см. Ссылку на руководство, опубликованную выше, и прочтите примеры в руководстве.
Это может произойти, если был вызван ob_start
до того, как код, который вы показали, был выполнен.
ob_start не был вызван ... это весь код. – thomas
Посмотрите на ваш php.ини конфигурационный файл и ищет строку, содержащую output_buffering
и убедитесь, что он выглядит следующим образом:
output_buffering = Off
Если у вас есть Off то echo headers_sent()
должен вывести 1
Если у вас на то echo headers_sent()
не будет выводить ничего, потому что headers_sent() в этом случае вернет FALSE, потому что заголовки (а не HTML <h1>
, но заголовки HTTP-ответа) еще не отправлены, поскольку вывод буферизирован.
Чтобы заставить отправки заголовков и выходного эхо-е изд вы до сих пор можно назвать flush()
output_buffering = 4096 – thomas
Вы были правы. Каковы последствия этой директивы? – thomas
Если оно выключено и вы не вызвали ob_start(), тогда первое эхо (или печать или любая другая команда, вызывающая вывод) начнет выводить ответ на браузер клиентов, что делает невозможным использование функций, которые изменяют заголовки HTTP, такие как header() или setcookie() - вызов этих функций приведет к ошибке «уже отправленные заголовки» –
Преобразование 'true' в строку должна принести' 1' ... отсутствие выхода указывает на то, что функция возвращается 'false' (который дает пустую строку). –
истинное значение печатается следующим образом: '1' – thomas
var_dump (headers_sent()); == 'bool (false)' – thomas