аватар Автор: Сергей Касаткин | 20 июня 2013 18:26

Статьи / PHP /

Как включить или выключить отображение ошибок в PHP?


Часто слышал о такой проблеме от других пользователей. Одним из-за хостера нужно скрыть появляющиеся ошибки, другим наоборот - понять, что происходит с их кодом, потому что ни одна ошибка не показывается. В этой статье постараюсь показать все основные способы отобразить / скрыть ошибки.

В скрипте PHP


1) В PHP есть всего лишь один оператор, который поддерживает систему управления ошибками - это знак @. Он позволяет проигнорировать сообщение любое сообщение об ошибке. Его нужно ставить ПЕРЕД выражением, которое может её содержать.

В примере специально допущена ошибка, но она НЕ будет отображена

$value = @$var[$key];

2) Также можно перед проверяемым скриптом PHP можно вставить настройку параметра отображения ошибок (display_errors). Он может приобретать значение либо On (показывать), либо Off (скрыть).

ini_set('display_errors','On');
error_reporting('E_ALL');

И соответственно после кода, который проверялся на ошибки, выставить параметр обратно.

ini_set('display_errors','Off');


Например, Вы хотите увидеть ошибки в скрипте

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"


Если Вам нужно работать с конкретным типом ошибок, то привожу основные их виды:

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


Как видите, параметр можно указать в нескольких местах. Однако, если у Вы хотите, чтобы целиком на сайте этот параметр имел определённое значение, то проще выставить его в файле php.ini.(к нему на хостинге не всегда может быть доступ), но в этом случае можно будет даже обойти настройки всего хостинга

В php.ini:

error_reporting = E_ALL
display_errors On

В верхней строке выбираем все виды ошибок, в нижней даём добро на их отображение.

После правок необходимо перезапустить Apache, чтобы настройки были изменены и вступили в силу (graceful или restart):

sudo apachectl -k graceful


В каком порядке обрабатывается параметр ошибок


В самом начале учитывается параметр php.ini , затем .htaccess , а после то, что указано непосредственно в скрипте PHP. Так что если что-то не сработало, то смотрим по цепочку выше, возможно, там настройка другая.

Как обычно спасибо за внимание и удачи! Надеюсь статья была полезна!
 



Похожие статьи


Комментарии к статье (vk.com)