- Как полностью выключить вывод ошибок в PHP?
- Как включить или выключить отображение ошибок в PHP?
- В скрипте PHP
- В файле .htaccess
- В файле php.ini
- В каком порядке обрабатывается параметр ошибок
- Как спрятать ошибки php
- Скрыть ошибку notice
- Скрыть ошибку через ini файл
- Скрыть ошибку через .htaccess файл
- Скрыть ошибки через панель администратора
- Php не показывает ошибки белый экран.
- Мой способ скрыть ошибки php
Как полностью выключить вывод ошибок в PHP?
У меня вопрос. Чтобы отключить вывод ошибок вообще (если заливаю сайт на прод.), то нужен тот же самый код, только везде значения — 0? Или хватит только одной строчки? Если одной, то какая из них?
Простой 6 комментариев
Вывод ошибок лучше не выключать. Для прод режима перенаправлять все ошибки на 404 страницу, ошибки писать в лог.
Konata Izumi, спасибо за совет. А как отловить ошибку? Чтобы написать ее в лог. Это ведь не исключение, где можно ведь код, например, обернуть в try и в catch писать лог.
В php5 можно по извращаться с register_shutdown_function
Konata Izumi, ну а почему бы не дополнить совет и не превратить его в полноценный ответ?
Например, показать самый простой способ записать в лог ошибку.
ini_set('display_errors', 0); ini_set('display_startup_errors', 0); error_reporting(E_ALL);
sorry_i_noob, в документации пишут, что display_startup_errors можно явно не отключать, но что Вам даст экономия на одной строчке против того, что ошибка может показываться пользователю, если на хостинге в php.ini что-то поменяется? У меня такое было при деплое на прод, лучше добавить заранее
Вывод ошибок лучше не выключать. Так вы лишите себя зацепок в случае багов на проде.
Для себя вывод подробностей ошибок перенаправляем в лог (файл/бд/другое хранилище).
Пользователю не нужно показывать подробности ошибок (стектрейс). Достаточно отобразить страницу с кратким описанием (понятным пользователю) ошибки, например «404 Не найдено то-то» или «500 Ошибка сервера».
Еще вариант — средиректить пользователя на главную страницу и флеш сообщением вывести краткое описание ошибки.
Я бы не рекомендовал затыкать вывод ошибок полностью, это bad practice. Пишу на PHP уже лет 10, и только недавно установил уровень E_ALL, исправление всех ошибок заняло где-то неделю, но сейчас я нарадоваться не могу, ибо ругается даже на отсутствие ключей в массиве (ибо в большинстве случаев если обращаются к какому-либо ключу, он должен быть в массиве, а его отсутствие — следствие какой-то проблемы). Об отсутствии какой-либо переменной я и вовсе не говорю. Для юзера достаточно просто подавить вывод ошибок (ибо сайт не будет работать только при E_FATAL и E_COMPILE, когда вообще не получается получить байткод), а для разрабов ошибки можно писать хоть в текстовый файл, используя собственный обработчик set_error_handler ().
Как включить или выключить отображение ошибок в PHP?
Часто слышал о такой проблеме от других пользователей. Одним из-за хостера нужно скрыть появляющиеся ошибки, другим наоборот — понять, что происходит с их кодом, потому что ни одна ошибка не показывается. В этой статье постараюсь показать все основные способы отобразить / скрыть ошибки.
В скрипте PHP
1) В PHP есть всего лишь один оператор, который поддерживает систему управления ошибками — это знак @. Он позволяет проигнорировать сообщение любое сообщение об ошибке. Его нужно ставить ПЕРЕД выражением, которое может её содержать.
В примере специально допущена ошибка, но она НЕ будет отображена
2) Также можно перед проверяемым скриптом PHP можно вставить настройку параметра отображения ошибок (display_errors). Он может приобретать значение либо On (показывать), либо Off (скрыть).
ini_set('display_errors','On');
error_reporting('E_ALL');
И соответственно после кода, который проверялся на ошибки, выставить параметр обратно.
Например, Вы хотите увидеть ошибки в скрипте
ini_set('display_errors', 'On'); // сообщения с ошибками будут показываться
error_reporting(E_ALL); // E_ALL - отображаем ВСЕ ошибки
$value = $var[$key]; // пример ошибки
ini_set('display_errors', 'Off'); // теперь сообщений НЕ будет
Можно выставить наоборот (в верхнем off, а в нижнем on), чтобы в конкретном отрезке кода ошибки НЕ отображались.
В файле .htaccess
Чаще всего проблему решают именно указанием настроек в файле .htaccess, который располагается в корневой директории сайта. В строке php_flag display_errors нужно также выставить On или Off
php_flag display_errors On
#показать все ошибки кроме предупреждений (Notice)
php_value error_reporting "E_ALL & ~E_NOTICE"
В файле php.ini
Как видите, параметр можно указать в нескольких местах. Однако, если у Вы хотите, чтобы целиком на сайте этот параметр имел определённое значение, то проще выставить его в файле php.ini.(к нему на хостинге не всегда может быть доступ), но в этом случае можно будет даже обойти настройки всего хостинга
error_reporting = E_ALL
display_errors On
В верхней строке выбираем все виды ошибок, в нижней даём добро на их отображение.
После правок необходимо перезапустить Apache, чтобы настройки были изменены и вступили в силу (graceful или restart):
sudo apachectl -k graceful
В каком порядке обрабатывается параметр ошибок
В самом начале учитывается параметр php.ini , затем .htaccess , а после то, что указано непосредственно в скрипте PHP. Так что если что-то не сработало, то смотрим по цепочку выше, возможно, там настройка другая.
Как обычно спасибо за внимание и удачи! Надеюсь статья была полезна!
Как спрятать ошибки php
Есть множество различных способов, какие-то могут работать у вас на сайте, какие-то нет.
Я пользуюсь простой записью вида :
Если «off» отключено, если «on» включено. Данную запись нужно поставить в начало страницы.
Естественно, что желательно иметь сайт построенный на «инклудах», чтобы данную запись поместить на одну страницу а не тыкать в каждую страницу, либо это должен быть движок.
Как собственно данный сайт сделанный на html + php + css с использованием икнклудов.
Скрыть ошибку notice
Иногда встречается ошибка notice — её можно забить таким образом:
Скрыть ошибку через ini файл
Открываем файл ini — он должен находиться выше корневой папки.. Ищем строку и ставим вместо on — off
Скрыть ошибку через .htaccess файл
В корневой папке должен быть файл htaccess
php_flag display_errors off
php_flag display_startup_errors off
Скрыть ошибки через панель администратора
Можно включать, отключать показ ошибок через панель администрирования, если мы говорим о том хостинге на котором я нахожусь! (Кстати рекомендую – отличный хостинг! )
Для примера давайте покажу, где отключать включать ошибки php у провайдера RUWEB.NET
Заходим в админ панель хостинга, ищем настройки php.
Ну и далее собственно , включаем или отключаем показ ошибок на сайте.
Php не показывает ошибки белый экран.
Если у вас вместо ошибок показывается белый экран, либо просто не выводятся ошибки, то возможно несколько вариантов.
Нельзя утверждать на все 100%, но возможно от настроек файла ini или же настроек через панель администрирования…
Но одно можно утверждать на 100% — если ошибка не выводится. то что-то этому мешает!
Мой способ скрыть ошибки php
Не знаю какой способ скрыть ошибки вы выберете, и все те способы, которые были описаны сверху- имеют право на существование, но я использую такой способ сокрытия ошибок, до безобразия примитивный!
Перёд include у меня стоит собака «@» — она будет забивать любую ошибку в коде php.
В случае, если я захожу на сайт в качестве админа, а так происходит в любом случае. То я увижу любую ошибку, а вот пользователь увидит пустую страницу.