Confused Man Ищу: «Предупреждение: невозможно изменить информацию заголовка» - PullRequest
3 голосов
/ 26 апреля 2011

Я очень хочу увидеть предупреждение PHP "Невозможно изменить информацию заголовка". Зачем? Потому что это разумно. Вы не должны иметь возможность отправлять заголовки после тела.

Но я могу !! Если я отлаживаю некоторые vars в контроллере и сразу не выполняю exit, скрипт просто перенаправляет на следующую страницу: все идет «хорошо», и я не вижу свои вар-дампы.

Где в PHP я могу настроить (?), Чтобы он не буферизовал вывод? Или что бы это ни было странное поведение!

Просто чтобы прояснить: я DO хочу предупреждение PHP, а я НЕ хочу, чтобы перенаправление header('Location: ...') работало.

Я почти уверен, что на моем предыдущем (локальном) сервере (оба W XP) он выдавал вывод / заголовок Предупреждение ...

редактировать
Для иллюстрации, с самым базовым кодом (который я буквально не использую, но косвенно это то же самое):

$form->validate($_POST);
var_dump($form->errors); // !!
if ( $form->noErrors ) {
  header('Location: '.$form->redirectUrl);
  exit;
}

ответы
@Heandel Сообщения об ошибках - это все (включая уведомления и устаревшие и т. Д.). Не должно иметь значения: отправка заголовков должна быть невозможной независимо от отображаемой ошибки.

@ tandu Я использую мой собственный фреймворк , но это тоже не имеет значения.

@ ceejayoz В моем коде нет ни одного ob_start. Я не использую это. (Шаблон ngin использует его, но шаблон не запускается при обратной передаче.)

@ Итай Моав Я не на общем хостинге. Я работаю локально на PHP 5.3.0 (WAMP) на Windows XP SP2. На моем веб-сервере (VPS) этого не происходит: я получаю приятное предупреждение PHP.

UPDATE
Спасибо, Гален

От php.ini:

; Note: Output buffering can also be controlled via Output Buffering Control
;   functions.
; Possible Values:
;   On = Enabled and buffer is unlimited. (Use with caution)
;   Off = Disabled
;   Integer = Enables the buffer and sets its maximum size in bytes.
; Note: This directive is hardcoded to Off for the CLI SAPI
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
output_buffering = On

Включив его Off сделал свое дело. Я не хочу никакой автоматической буферизации вывода. Спасибо!

Ответы [ 2 ]

5 голосов
/ 26 апреля 2011

В файле php.ini найдите output_buffering и убедитесь, что он установлен на 0

http://us.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering

2 голосов
/ 26 апреля 2011

положить flush() после var_dump

...