Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Как включить отображение всех ошибок 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 и, наверняка, администратор сервера не зря их выставил так, чтобы они работали или были отключены. Не надо злить других админов, перепрописывая в своём коде заданные не вами значения. Если при этом все ошибки и предупреждения были исправлены, то вероятность того, что она будет глючить, — минимальна.

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

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

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