Проблема с output_buffering и php.ini - PullRequest
1 голос
/ 21 апреля 2009

при попытке авторизации на этом сайте (пользователь: polopolo, pass: samara), результат - пустая страница. Я знаю, что проблема связана с отправкой заголовков и ouput_buffering в файле php.ini. У меня была такая же проблема на другом хосте, но проблема была исправлена, когда я изменил output_buffering = On . Это не работает на текущем хосте, и мне интересно, почему? Какие-либо предложения?

-the phpinfo текущего сайта.


Edit: Задача решена. Я перепроектировал код и нашел несколько дополнительных пробелов после закрывающего тега php перед отправкой заголовков. Код не был написан мной, и я инстинктивно проигнорировал эту опцию, поскольку вся система уже работала на другом сервере. Но мой коллега сделал некоторые изменения, о которых я не знал ... Урок усвоен: командная работа важна и не позволяет никому думать за вас. Тем не менее, для меня остается загадкой, почему после всех попыток отобразить ошибки и, в частности, «Не удается изменить заголовки», которые они отображали неправильно. Я сделал все, что вы мне посоветовали - отображать ошибки, регистрировать их и так далее ... в любом случае, спасибо.

Ответы [ 3 ]

4 голосов
/ 22 апреля 2009

Предположительно, страница, на которую вы попали сразу после входа, выполняет перенаправление.

Выполнение перенаправления требует вывода HTTP-заголовка с ответом. Проблема в том, что если PHP уже начал выводить тело документа, он не может затем вывести заголовок, потому что их заголовки закончились при запуске тела.

Буферизация вывода не позволяет PHP выводить любую часть тела документа до тех пор, пока выходной буфер не будет очищен (или PHP не выйдет). Это позволяет вам выводить заголовки в любое время.

Теперь, если включение буферизации вывода устранило проблему на собственном сайте / сервере, но не на другом, это ясно показывает, что на самом деле это не та же проблема - вы столкнулись с другой проблемой.

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

1 голос
/ 21 апреля 2009

Я не эксперт, и я не могу понять, что буферизация вывода связана с чем-то, может быть, в коде есть ошибки?

Не могли бы вы создать файл .htaccess со следующим содержимым:

php_flag display_errors on
php_value error_reporting 30719

Поместите его в корневую папку этого сайта и попробуйте снова войти в систему, чтобы увидеть, есть ли какие-либо ошибки вывода?

0 голосов
/ 09 сентября 2009

У меня тоже была такая же проблема при работе над проектом. Я исправил это позже, установив output_buffering = 4096 в файле конфигурации php.ini, и он отлично работал в localhost, но когда я поместил его на хост-сервер, я снова получил эту ошибку. Я не уверен, как использовать мой собственный файл конфигурации php.ini на хост-сервере. Любые предложения приветствуются ...

...