#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.