Как включить отображение всех ошибок php при написании программы

Во время написания кода программы на языке программирования php хочется написать её не только быстро, но и правильно. Для этого можно поменять настройки отображения ошибок в конфигурационном файле php.ini. Но переключать каждый раз режим отображения ошибок и уровень их протоколирования накладно по времени, плюс нужно помнить, где на сервере лежит конфиг php. В этой статье рассмотрим простой и работающий способ переопределения констант, заданных в конфиге php.ini, в файле программы. Это позволит не только ускорить процесс написания кода, но и быстро отключать режим отладки, когда программа готова к запуску в продакшен.



Необходимый код для включения отображения всех ошибок и предупреждений php в работающей программе

Сначала приведу работающий код, который позволяет включить показ всех (кроме критических) ошибок и всех предупреждений, которые обычно отключены:

<?php
$errlevel = error_reporting();
error_reporting(-1);
ini_set('display_errors', 'On');
ini_set('error_prepend_string', '<font color=red>');
ini_set('error_append_string', '</font>');
/* тут собственно сам код программы на php */
error_reporting($errlevel);
ini_set('display_errors','Off');
?>

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

error_reporting() — функция работы с уровнем протоколируемых ошибок

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

$errlevel = error_reporting();

Во второй строчке меняем уровень протоколирования (вывода) ошибок на значение -1, воспользовавшись советом из официальной документации:

Если передать -1, будут отображаться все возможные ошибки, даже если в новых версиях PHP добавятся уровни или константы. В версии PHP 5.4. передача константы E_ALL дает тот же результат.

Это выглядит следующим образом:

error_reporting(-1);

В конце работы скрипта, требующего отладки, можно вернуть уровень протоколирования, заданный в php.ini, который мы заблаговременно сохранили в переменную $errlevel. Именно это и происходит в предпоследней строке:

error_reporting($errlevel);

Переопределение переменных конфигурационного файла php.ini с помощью функции ini_set()

После того, как мы включили режим отображения всех ошибок и предупреждений, их нужно выдать на экран при работе отлаживаемого скрипта. Этот режим отладки обычно выключен, поэтому его нужно включить, переопределив некоторые переменные конфигурационного файла php.ini с помощью функции ini_set(), которая устанавливает значения переменных настройки конфигурации работы php.

Включение/отключение отображения ошибок при выполнении скрипта директивой display_errors

Для того, чтобы увидеть отображение ошибок и предупреждений при выполнении скрипта, нужно выставить значение 'On' или 1 директиве display_errors:

ini_set('display_errors', 'On');

После того участка программы, которая требует отладки, можно снова отключить отображение ошибок php. Именно это и происходит в последней строке приведённого выше кода (возврат значения 'Off', которое используется в конфиге php по умолчанию):

ini_set('display_errors','Off');

Подсветка отображаемых ошибок и предупреждений, выдаваемых при включенном display_errors

В принципе, приведённого кода, описанного выше, достаточно. Но мне удобнее, когда ошибки выводятся другим цветом, чем основой вывод, генерируемый при работе отлаживаемого скрипта. Для этого необходимо экранировать выводимые ошибки и предупреждения HTML-кодом. Для этого я использовал простейшее изменение цвета выводимого шрифта с помощью тега font, что конечно можно усложнить, вписав тот код, который наиболее подходит решаемой задаче, задав какие угодно css-стили для подсветки ошибок и предупреджений. Можно даже задать отдельный класс и выводить его из отдельного css-файла. Но, я решил не усложнять.

Директива error_prepend_string

Директива error_prepend_string задаёт строку, которая будет выводиться непосредственно перед сообщением об ошибке. В нашем коде она имеет вид:

ini_set('error_prepend_string', '<font color=red>');

Директива error_append_string

Директива error_append_string задаёт строку, которая будет выводиться после сообщения об ошибке. В нашем коде она имеет вид:

ini_set('error_append_string', '</font>');

Резюме

Таким образом можно значительно упростить и ускорить написание правильно работающего php-кода. Важно помнить, что после отладки, лучше удалить все эти строки, отвечающие за отображение ошибок и предупреждений, из кода. То, как будет работать программа в продакшене, зависит от настроек того сервера, где она будет запускаться. У него собственный файл конфигурации php.ini и, наверняка, администратор сервера не зря их выставил так, чтобы они работали или были отключены. Не надо злить других админов, перепрописывая в своём коде заданные не вами значения. Если при этом все ошибки и предупреждения были исправлены, то вероятность того, что она будет глючить, — минимальна.

Заберите ссылку на статью к себе, чтобы потом легко её найти ;)

Выберите, то, чем пользуетесь чаще всего:

Спасибо за внимание, оставайтесь на связи! Ниже ссылка на форум и обсуждение ; )

Войдите чтобы комментировать
maxidrom ответил в теме #8633 1 год 3 нед. назад
if($_SESSION==1)
{
error_reporting(1);
ini_set('display_errors', 'On');
}

если id=1 это админ, то показывать ошибки, на хостингах удобно.
Alex1 ответил в теме #8590 1 год 1 мес. назад
Спасибо, полезная информация. Но столкнулся с такой проблемой. Где находиться файл php.ini. Если вы не знаете где файл php.ini? Используйте php функцию phpinfo(). Откроется таблица. Там есть путь до php.ini. Найдите параметр “Loaded Configuration File” и “Configuration File (php.ini) Path”. Вот здесь я нашел решение. profi.spage.me/php/show-php-file-errors-enable-php-error-display

Обсудить эту статью

INFO: Вы отправляете сообщение как 'Гость'