PHP: один сервер принимает заголовок после текста, другой нет

#php

#php

Вопрос:

Недавно я получил случайный символ между определениями функций во включаемом файле и некоторое время этого не замечал.

На моем сервере разработки это не было очевидной проблемой. Символ напечатан и немедленно перезаписан баннером. Я даже никогда этого не видел. Всякий раз, когда я приходил к заголовку (‘Location: xxx’), он выполнялся нормально.

Но на рабочем сервере я сразу же начал получать ошибку «заголовки уже отправлены» всякий раз, когда возникало это перенаправление, что в конечном итоге и предупредило меня о случайном персонаже в первую очередь. (Хотя для его обнаружения потребовалось некоторое время.)

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

Разработка выполняется на php 5.3.3 под Apache 2.2.16 в Linux. На FreeBSD работает php 5.3.6 под управлением Apache 2.2.20.

Ответ №1:

похоже, на вашем сервере разработки включена буферизация вывода. (php.ini: output_buffering ) должно быть «выключено» или количество байтов в буфере.

Комментарии:

1. Спасибо, это было все. У сервера разработки было 4096, а у производственного сервера не было значения.

Ответ №2:

Предупреждение «заголовки уже отправлены» — это просто предупреждение. Это может быть подавлено директивой error_reporting в php.ini. Проверьте свои файлы журналов, вы должны получать это предупреждение.

Комментарии:

1. Спасибо за хорошее предложение. В этом случае оказалось, что ошибки на самом деле не возникали на сервере разработки, потому что он был настроен по умолчанию для буферизации вывода 4K.