2010-10-13 3 views

ответ

2

Потому что он возвращает 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, находящимся на нем, сохраняется весь вывод до завершения обработки сценария, а затем отображается этот вывод, поэтому тег заголовка/тела отправляется в конце скрипта.

Надеюсь, это очистит его. Если нет, см. Ссылку на руководство, опубликованную выше, и прочтите примеры в руководстве.

+0

Преобразование 'true' в строку должна принести' 1' ... отсутствие выхода указывает на то, что функция возвращается 'false' (который дает пустую строку). –

+0

истинное значение печатается следующим образом: '1' – thomas

+0

var_dump (headers_sent()); == 'bool (false)' – thomas

0

Это может произойти, если был вызван ob_start до того, как код, который вы показали, был выполнен.

+0

ob_start не был вызван ... это весь код. – thomas

3

Посмотрите на ваш php.ини конфигурационный файл и ищет строку, содержащую output_buffering и убедитесь, что он выглядит следующим образом:

output_buffering = Off

Если у вас есть Off то echo headers_sent() должен вывести 1

Если у вас на то echo headers_sent() не будет выводить ничего, потому что headers_sent() в этом случае вернет FALSE, потому что заголовки (а не HTML <h1>, но заголовки HTTP-ответа) еще не отправлены, поскольку вывод буферизирован.

Чтобы заставить отправки заголовков и выходного эхо-е изд вы до сих пор можно назвать flush()

+0

output_buffering = 4096 – thomas

+0

Вы были правы. Каковы последствия этой директивы? – thomas

+0

Если оно выключено и вы не вызвали ob_start(), тогда первое эхо (или печать или любая другая команда, вызывающая вывод) начнет выводить ответ на браузер клиентов, что делает невозможным использование функций, которые изменяют заголовки HTTP, такие как header() или setcookie() - вызов этих функций приведет к ошибке «уже отправленные заголовки» –

Смежные вопросы