Каким бы аккуратным и внимательным не был веб-программист, во время его работы возможны ошибки и неточности. В результате это может вылиться в сбои сайта или сервиса. Для отладки во время разработки проекта имеется возможность включить вывод ошибок в PHP.
Как это работает?
PHP безусловно реагирует на тот или иной код скрипта. В одних случаях — выполняя необходимое действие, в других — выводит ошибку. Данный механизм помогает разработчику в момент реализации участка кода оперативно исправлять недочёты.
Однако, вывод ошибок в PHP нужен не всегда. После того как разработка проекта завершена, эту функцию отключают, для того чтобы избежать взлома или несанкционированного доступа.
Настройка
За всю конфигурацию интерпретатора PHP отвечает файл php.ini. В нем имеется директива error_reporting, которая как раз и определяет вывод ошибок в PHP. Однако, хоть она и включает обработку исключений, за отображение их в окне браузера отвечает display_errors. Если она отключена, то система отобразит вместо ошибки пустую страницу.
Классификация исключений
Вывод ошибок в PHP можно условно разделить на несколько категорий:
ошибки, в результате которых работа скрипта остановится. Так называемые, фатальные. К ним относятся E_ERROR, E_COMPILE_ERROR;
ошибки, которые можно устранить. Их значения для директивы error_reporting могут быть: E_WARNING, E_NOTICE и другие.
Стоит более подробно рассмотреть каждый тип и описать его функционал.
E_ERROR. Обычно этот тип ссылается на такие ошибки, которые невозможно оперативно устранить или продолжить выполнение скрипта. Сюда могут входить проблемы с распределением памяти;
E_WARNING. Код продолжит свою работу, но будет выведено предупреждение о том, что имеется какая-то ошибка, код которой указывается в сообщении. Не критичны;
E_NOTICE. Уведомления, которые показывают: произошло нечто, что могло бы вызвать ошибку. Также не являются критичными для выполнения кода;
E_USER_ERROR. Ошибки, сгенерированные самим пользователем;
E_ALL. Сюда входят все типы ошибок. Как правило, данная опция включена по умолчанию при установке интерпретатора.
Как включить вывод ошибок в PHP
Методика использования механизмов ошибок в PHP может различаться в зависимости от того, где применяется код — на хостинге или на локальном компьютере. Во втором случае разработчик может настроить свой сервер и отображение так, как ему вздумается, а именно — изменить конфигурацию в файле php.ini. Достаточно привести две директивы — display_errors и error_reporting к следующему виду:
display_errors on
error_reporting E_ALL
Данные команды позволят выводить все сообщения об ошибках прямо в окне браузера.
Если же разработка проводится на виртуальном хостинге, то чаще всего функция отображения ошибок там отключена в целях безопасности. Поэтому для ее активации потребуется использовать файл настроек сервера Apache htaccess. Обычно он находится в корне сайта. Нужно добавить в него пару строк с помощью любого текстового редактора:
php_flag display_errors on
php_value error reporting -1
Также вывести ошибки можно прямо из кода, используя функцию ini_set(). Однако стоит учитывать, что после окончания разработки сайта ее применение может вызвать проблемы с безопасностью.
Запись в файл
PHP позволяет сохранять все произошедшие ошибки в определённое место на жёстком диске. Для того чтобы включить вывод ошибок PHP в файл, можно использовать три способа:
редактировать файл php.ini. Здесь нужно определить две строки. Первая — log_errors = On, которая, собственно и активирует возможность вывода. Вторая — error_log = путь/к желаемому/файлу.
Изменить htaccess. В него также можно добавить две строчки. php_value log_errors «on» и php_value error_log путь/к файлу.
Использовать в необходимом месте кода функцию ini_set.
Заключение
Вывод ошибок в PHP — необходимый инструмент в отладке кода. Но также он может создать потенциально уязвимые зоны. Поэтому использовать этот механизм нужно внимательно и аккуратно. После того как сайт или сервис прошёл все этапы тестирования, нужно озаботиться тем, чтобы он не отображал ошибок, с помощью которых злоумышленник может получить доступ к важным данным.