Отключить вывод ошибок в php 5.6?
Как отключить вывод ошибок в php 5.6, картинки, обрабатываемые некоторыми скриптами, не показываются, когда раньше мне хватало в .htaccess сделать данное:
php_flag log_errors Off php_flag display_errors Off php_flag display_startup_errors Off
Сейчас это уже не помогает и в php.ini я не совсем понял как отключить вывод ошибок совсем, но в index.php я прописал это error_reporting( E_ERROR ) ;
Отслеживать
19.4k 29 29 золотых знаков 47 47 серебряных знаков 139 139 бронзовых знаков
задан 26 июн 2016 в 12:56
31 1 1 золотой знак 2 2 серебряных знака 7 7 бронзовых знаков
error_reporting(0); , display_errors(false); ?
26 июн 2016 в 13:00
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Некоторым директивам в php.ini можно указывать значения на лету. Если у вас 1 входной файл (обычно php фреймворки так устроены), то можно использовать код для управления уровнем ошибок через ini_set:
ini_set('error_reporting', 0); ini_set('display_errors', 0);
Учитите, что во время выполнения скрипта эти директивы могут изменяться таким же образом.
Кстати если вы отдаете в клиенту картинку и в процессе произошла ошибка, то по логике вы и не должны увидеть картинку. Надо бы вернуть корректный HTTP статус и тип документа отличный от картинки.
PS. Если вы используете фреймворк, то почитайте мануал к нему, там точно должны быть указаны конфиги для управления обработки ошибок.
PHP : Включить и выключить показ предупреждений и ошибок PHP
Включение вывода всех ошибок и предупреждений в коде PHP-скриптов. Включить вывод уведомлений и предупреждений можно, добавив в начало нужного .php файла следующие строки:
ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1);
ini_set('display_errors', 'Off');
Включение вывода всех ошибок и предупреждений в файле .htaccess
php_value display_errors 1 php_value display_startup_errors 1 php_value error_reporting E_ALL
E_ALL - все ошибки E_ERROR - ошибки функций (критические) E_WARNING - предупреждения E_PARSE - ошибки синтаксиса E_NOTICE - замечания (ненормальный код - кодировка и тп) E_CORE_ERROR - ошибка обработчика E_CORE_WARNING - предупреждения обработчика E_COMPILE_ERROR - ошибка компилятора E_COMPILE_WARNING - предупреждение компилятора E_USER_ERROR - ошибка пользователей E_USER_WARNING - предупреждение пользователей E_USER_NOTICE - уведомления пользователей
Порядок обработки ошибок:
Сначала учитываются параметры php.ini, далее .htaccess, далее что указано в скрипте PHP
Как включить вывод ошибок PHP
Хостинг-провайдеры нередко отключают или блокируют вывод всех ошибок и предупреждений. Такие ограничения вводятся не просто так. Дело в том, что на рабочих серверах крайне не рекомендуется держать ошибки в открытом доступе. Информация о неисправностях может стать «наживкой» для злоумышленников.
При этом в процессе разработки сайтов и скриптов, очень важно отслеживать возникающие предупреждения. Знать о сбоях и неисправностях также важно и системным администраторам — это позволяет предотвратить проблемы на сайте или сервере.
Самый оптимальный вариант — не просто скрыть показ ошибок, но и настроить запись о них в логах. Это позволит отслеживать предупреждения и не подвергать сервер угрозе.
В статье мы расскажем, как включить и отключить через .htaccess вывод ошибок php, а также двумя другими способами — через скрипт PHP и через файл php.ini.
Обратите внимание: в некоторых случаях изменение настроек вывода возможно только через обращение в техническую поддержку хостинга.
Через .htaccess
Перейдите в каталог сайта и откройте файл .htaccess.
Вариант 1. Чтобы включить вывод, добавьте следующие строки:
php_flag display_startup_errors on php_flag display_errors on php_flag html_errors on
Чтобы отключить ошибки PHP htaccess, введите команду:
php_flag display_startup_errors off php_flag display_errors off php_flag html_errors off
Также выключить .htaccess display errors можно командой:
php_flag display_startup_errors off php_flag display_errors off php_flag html_errors off php_value docref_root 0 php_value docref_ext 0
Через логи PHP
Если вам нужно проверить или выключить ошибки только в определенных файлах, это можно сделать с помощью вызова PHP-функций.
Вариант 1. Чтобы включить вывод, используйте команду error_reporting. В зависимости от типа ошибок, которые вы хотите увидеть, подставьте нужное значение. Например, команда для вывода всех ошибок будет выглядеть так:
error_reporting(E_ALL)
А для всех типов, исключая тип Notice, так:
error_reporting(E_ALL & ~E_NOTICE)
Чтобы отключить вывод, введите команду:
error_reporting(0)
Чтобы отключить логирование повторяющихся ошибок, введите:
# disable repeated error logging php_flag ignore_repeated_errors on php_flag ignore_repeated_source on
Вариант 2. Чтобы проверить конкретный кусок кода, подойдет команда ниже. В зависимости от типа ошибок, которые вы хотите увидеть, в скобках подставьте нужное значение. Например, команда для вывода всех ошибок будет выглядеть так:
ini_set('display_errors', 'On') error_reporting(E_ALL)
После этого в консоли введите:
ini_set('display_errors', 'Off')
Вариант 3. Ещё один из вариантов подключения через скрипт:
php_flag display_startup_errors on php_flag display_errors on
Для отключения укажите:
php_flag display_startup_errors off php_flag display_errors off
Вариант 4. Чтобы настроить вывод с логированием через конфигурацию веб-сервера, введите:
- для Apache — ErrorLog «/var/log/apache2/my-website-error.log» ,
- для Nginx — error_log /var/log/nginx/my-website-error.log .
Подробнее о других аргументах читайте в документации на официальном сайте php.net.
Через файл php.ini
Настроить отслеживание также можно через файл php.ini. Этот вариант подойдет, когда отображение или скрытие ошибок нужно настроить для всего сайта или кода. Обратите внимание: возможность настройки через файл php.ini есть не у всех, поскольку некоторые хостинг-провайдеры частично или полностью закрывают доступ к файлу.
Вариант 1. Если у вас есть доступ, включить вывод можно командой:
display_errors = on
После этого нужно перезагрузить сервер:
sudo apachectl -k graceful
Вариант 2. Чтобы включить вывод, используйте команду error_reporting. В зависимости от типа ошибок, которые вы хотите увидеть, после знака = подставьте нужное значение. Например, команда для вывода всех ошибок будет выглядеть так:
error_reporting = E_ALL display_errors On
После ввода перезагрузите сервер:
sudo apachectl -k graceful
Чтобы скрыть отображение, во второй строке команды укажите Оff вместо On:
display_errors Off
Теперь вы знаете, как настроить не только через PHP и php.ini, но и через htaccess отображение ошибок.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь
Как полностью выключить вывод ошибок в PHP?
У меня вопрос. Чтобы отключить вывод ошибок вообще (если заливаю сайт на прод.), то нужен тот же самый код, только везде значения — 0? Или хватит только одной строчки? Если одной, то какая из них?
- Вопрос задан более трёх лет назад
- 20644 просмотра
6 комментариев
Простой 6 комментариев
Konata Izumi @Konata69lol
Вывод ошибок лучше не выключать. Для прод режима перенаправлять все ошибки на 404 страницу, ошибки писать в лог.

sorry_i_noob @sorry_i_noob Автор вопроса
Konata Izumi, спасибо за совет. А как отловить ошибку? Чтобы написать ее в лог. Это ведь не исключение, где можно ведь код, например, обернуть в try и в catch писать лог.

serginhold @serginhold
В php5 можно по извращаться с register_shutdown_function

Дмитрий @slo_nik Куратор тега PHP
Konata Izumi, Ваш комментарий надо перенести в ответ, чтобы другие соискатели ответа его видели.

Konata Izumi @Konata69lol
Дмитрий, это была скорее рекомендация, а не ответ.
Ну ок, перенесу.

Дмитрий @slo_nik Куратор тега PHP
Konata Izumi, ну а почему бы не дополнить совет и не превратить его в полноценный ответ?
Например, показать самый простой способ записать в лог ошибку.
Решения вопроса 3

Daria Motorina @glaphire Куратор тега PHP
PHP developer
В точке входа в проект (index.php), в самом начале выставить все по нулям
ini_set('display_errors', 0); ini_set('display_startup_errors', 0); error_reporting(E_ALL);
Ответ написан более трёх лет назад
Нравится 7 4 комментария

sorry_i_noob @sorry_i_noob Автор вопроса
Вы уверены, что нужны именно три строки? Не хотелось бы писать лишний код.

Daria Motorina @glaphire Куратор тега PHP
sorry_i_noob, в документации пишут, что display_startup_errors можно явно не отключать, но что Вам даст экономия на одной строчке против того, что ошибка может показываться пользователю, если на хостинге в php.ini что-то поменяется? У меня такое было при деплое на прод, лучше добавить заранее

Даша, ради бога, error_reporting() в E_ALL
Daria Motorina, не соглашусь, иногда некритичные ошибки предупреждения ломают отдаваемый JSON.

Konata Izumi @Konata69lol
backend developer (php/go)
Вывод ошибок лучше не выключать. Так вы лишите себя зацепок в случае багов на проде.
Для себя вывод подробностей ошибок перенаправляем в лог (файл/бд/другое хранилище).
Пользователю не нужно показывать подробности ошибок (стектрейс). Достаточно отобразить страницу с кратким описанием (понятным пользователю) ошибки, например «404 Не найдено то-то» или «500 Ошибка сервера».
Еще вариант — средиректить пользователя на главную страницу и флеш сообщением вывести краткое описание ошибки.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

Заполнил свой профиль
Я бы не рекомендовал затыкать вывод ошибок полностью, это bad practice. Пишу на PHP уже лет 10, и только недавно установил уровень E_ALL, исправление всех ошибок заняло где-то неделю, но сейчас я нарадоваться не могу, ибо ругается даже на отсутствие ключей в массиве (ибо в большинстве случаев если обращаются к какому-либо ключу, он должен быть в массиве, а его отсутствие — следствие какой-то проблемы). Об отсутствии какой-либо переменной я и вовсе не говорю. Для юзера достаточно просто подавить вывод ошибок (ибо сайт не будет работать только при E_FATAL и E_COMPILE, когда вообще не получается получить байткод), а для разрабов ошибки можно писать хоть в текстовый файл, используя собственный обработчик set_error_handler ().
