Updateпредупреждение PHP не показывает, когда он должен
Установка output_buffering 0 в php.ini решает эту проблему. Но есть ли способ сделать это, не полагаясь на эту директиву? В соответствии с PHP docs эта директива имеет режим PHP_INI_PERDIR, что означает, что она не может быть установлена с помощью ini_set() и должна быть установлена в одном из php.ini, .htaccess, httpd.conf или .user.ini.
Оригинальный вопрос
Я знаю, как решить «Не удается изменить информацию в заголовке» предупреждение PHP, но я не могу показаться, чтобы получить это предупреждение появляется, даже когда я пытаюсь изменить заголовки после выхода , Например:
error_reporting(E_ALL);
ini_set('display_errors', 1);
echo ini_get('error_reporting');
header('location:./');
Не будет выдавать ошибку и будет просто перенаправляться, как ничего не произошло. Такое поведение не происходит в моей тестовой среде (я получу ошибку, как ожидалось). Это мои настройки для разработчика против тестирования:
Разработка
PHP v5.5.15
error_reporting = E_ALL
display_errors = On
Тестирование
PHP v5.3.27
error_reporting = E_ALL
display_errors = On
Я подозреваю, что может быть другая настройка PHP для этого, но я не смог найти его. Есть идеи?
Возможно, сервер имеет буферизацию вывода, включенную по умолчанию? проверьте phpinfo() до/после эхо-вызова и посмотрите, действительно ли ваши ожидаемые настройки действуют или переопределены в другом месте. –
Я попытался установить output_buffering на 0 в php.ini, и это сработало! Моя тестовая среда также уже имела output_buffering = 0.Другие вещи, которые я обнаружил, заключались в том, что выполнение phpinfo() запускает предупреждение независимо от output_buffering, а использование ini_set() для изменения output_buffering «на лету» не работает. – thewiglaf
также отмечают, что если по какой-либо причине сервер имеет отключенную переопределенную конфигурацию ini_set/error_reporting, вы вполне можете отбросить логическую ложную или пустую строку, которая НЕ запускает заголовки. Попробуйте отозвать фиксированную строку, например. 'echo 'hello'', чтобы вы знали, что что-то получится. –