как правильно контролировать код статуса http? - PullRequest
0 голосов
/ 27 ноября 2011

Я встретил странную вещь, когда тестировал обработку ошибок 400 в CodeIgniter.

Сообщение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с ...)

И код состояния http всегда равен 200, в конце концов я обнаружил, чтоперед <?php ... стоит новая строка.Затем я проверил документацию php и нашел:

header () используется для отправки необработанного HTTP-заголовка.См. Спецификацию HTTP / 1.1 для получения дополнительной информации о заголовках HTTP.

Помните, что header () должна вызываться перед отправкой любого фактического вывода, либо обычными HTML-тегами, либо пустыми строками в файле,или из PHP.

Итак, как правильно установить код состояния http в php, чтобы убедиться, что он перед любым выводом?Я новичок в программировании PHP.Спасибо за ответ!

Ответы [ 3 ]

2 голосов
/ 27 ноября 2011

Так как правильно установить код состояния http в php, чтобы убедиться, что он перед любым выводом?

Вы вызываете header(), прежде чем делать что-либо, что создает вывод (включая размещение пробельных символов вне <?php секций).

1 голос
/ 27 ноября 2011

Как уже говорили другие, вы должны отправлять заголовки (т.е. использовать header()) перед любым другим выводом.

Одна вещь, которая часто может случиться, это то, что иногда вы включаете файлы, в которых случайно появляются символы новой строки после закрывающего тега PHP. например,

<?php
/*
 * This is a file of PHP code
 */


/*
 * file ends here
 */
?>

__________________________ (actual end of file)
# unexpected newline above gets sent as output

Чтобы уменьшить вероятность этого, вы можете сознательно не использовать закрывающий тег PHP. Файл будет анализироваться как PHP до конца, поэтому вероятность появления ложных символов новой строки или пробелов из включенного файла гораздо ниже.

В зависимости от вашего редактора вы также можете настроить его на отображение пробелов (возврат каретки, пробелы, табуляции), что может помочь при попытке устранить непредвиденный вывод из ваших скриптов (например, Eclipse и Notepad ++ могут это делать).

0 голосов
/ 27 ноября 2011

Пожалуйста, используйте header() функцию, прежде чем что-либо будет возвращено посетителю.

Если вы не можете определить, где что-то возвращается, прежде чем вызывать header(), добавьте функцию ob_start() в началеPHP-скрипта.

Хотя он будет работать, я все же предлагаю вам очистить ваш код и не допустить вывода данных раньше, чем это должно быть.Лучше всегда знать, что происходит в вашем собственном коде, и не прибегать к решениям patch .

...