функция php headers_sent не работает - PullRequest
4 голосов
/ 13 октября 2010
<h1>Header</h1>
<?php
echo 'teste'; // output here
echo headers_sent(); // no output here!
?>

Почему headers_sent () не выводится в этом случае? Спасибо.

Ответы [ 3 ]

4 голосов
/ 13 октября 2010

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

output_buffering = Off

Если он выключен, то echo headers_sent() должен выдать 1

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

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

2 голосов
/ 13 октября 2010

Потому что он возвращает истину или ложь.

var_dump(headers_sent());

Должно отображаться (одно или другое ниже)

bool(true)
bool(false)

Работает, просто не будет выводить текст, , если оно ложно , , поскольку это не текст , это значение boolean.Общее использование этой функции предназначено для оператора if, а не для оператора отображения, если вы хотите отобразить его, просто используйте ternary operator

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

Edit

Спасибо Виктору за поправку: он вернет 1, если истина, пустую строку, если ложь.

Обновление

Почему headers_sent() возвращает false?Для пояснения я напишу из руководства:

headers_sent - Проверяет, были ли отправлены или куда отправлены заголовки

Обычно, когда у вас есть какие-либо выходные данные, отправляет заголовкиавтоматически в браузер и запускает тело.Например:

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

Это должно отобразить 1, так как у нас был оператор echo для вызова headers_sent.

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

Это отобразит пустую строку, учитывая, что до вызова headers_sent () нет вывода.Выше предполагает , что output_buffering выключен.Как и при включенном output_buffering, он сохраняет весь вывод до завершения обработки сценария, а затем отображает этот вывод, таким образом, тег заголовка / тела отправляется в конце сценария.

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

0 голосов
/ 13 октября 2010

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

...