Отображение ошибок php. Вывод ошибок разных уровней в PHP


Разберёмся как сделать включение / отключение показа ошибок на сайте. Через админку и через файл htaccess.

Показ ошибок (Notice, Warning, Fatal Error) это важная и нужная функция, хорошо что она есть! Иначе бы вебмастера месяцами искали вручную ошибки в коде своего сайта.

Как включить показ ошибок из админки Joomla 3?

Для этого в админке Joomla переходим "Система - Общие настройки".

Переходим на вкладку "Сервер", там увидите опцию "Сообщения об ошибках". Выбирайте режим "Максимум".

Сохраняем.

После этого на страницах сайта будут появляться сообщения об ошибках, если таковые имеются. Это полезно, если где-то на сайте у вас появляется белый экран.

После включения показа сообщений об ошибках на белом экране вы увидите тип ошибки и её описание.
По этому описанию можно найти решение в поиске Яндекса или Гугла.

Включение показа ошибок php через configuration.php

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

В нём есть директива

public $error_reporting = "default";

Чтобы включить показ ошибок, измените значение default на maximum

Как включить показ ошибок через.htaccess

Если у вас не Joomla, а свой скрипт или по каким то причинам не получается включить сообщения об ошибках первыми двумя способами, то это можно сделать через файл.htaccess, который также находится в корневой папке вашего сайта.

Открываем.htaccess - обратите внимание точка впереди. Если у вас нет такого файла, то создайте его.
В CMS системах он обычно называется htaccess.txt и его достаточно просто переименовать в.htaccess

В самом верху добавляем строчку:

php_flag display_errors on

А строчка:

php_flag display_errors off

выключает показ ошибок.

Какие сообщения об ошибках php бывают?

Самые частые это:

Notice - уведомление о незначительных ошибках в коде. Обычно работоспособность сайта при этом сохраняется.

Просто в шапке выходят такие вот уведомления.

Warning - предупреждение о более серьёзных ошибках. Иногда при таком предупреждении работоспособность сайта также сохраняется, иногда белый экран.

При работе с сайтом каждый разработчик сталкивался с ситуацией, когда при включении модуля, добавления своего кода или другого изменения на сайте, возникал так называемый WHITE SCREEN OF DEATH (белый экран смерти), который обычно вызван ошибкой PHP . Первое действие разработчика, естественно, откатить изменения, повлёкшие за собой эту ошибку. Но ведь ошибку-то исправлять надо, а значит, надо посмотреть что именно является причиной её возникновения.

Хорошо, если у разработчика есть возможность посмотреть логи апача. Но тут возникают трудности: не каждый хостер их ведёт, да и не у каждого программиста есть к ним доступ. В конце концов, чтобы их посмотреть надо будет лезть на сервер. Но ведь все программисты ленивые, а значит, надо искать более простое решение. И этим решением является прямой вывод ошибок на экран.

Я не беру в расчёт страницу в друпале, позволяющую выводить ошибки на экран (admin/settings/error-reporting), т.к. от белого экрана она не спасёт. Она выводит ошибки, ломающие модули,а не в целом сайт. Т.е. если забыть поставить (например) isset для переменной, которая может быть не определена - то ошибка будет показана на экране. Зато если забыть поставить точку с запятой после выполнения операции, то эту ошибку друпал уже не выведет, а вы увидите белый экран.

Включить вывод ошибок можно несколькими способами.

Способ 1. Включение вывода ошибок на экран через php.ini

Если вы имеете доступ (ну а вдруг) к серверу, то в конфигурационном файле php.ini найдите параметр error_reporting и установите его значение в E_ALL .

Error_reporting = E_ALL

Способ 2. Включение вывода ошибок на экран через.htaccess

В корне Друпала имеется файл.htaccess, который регулирует процессы загрузки страниц. Чтобы включить вывод сообщений, откройте его и добавьте следующие две строки:

Php_flag display_errors on php_flag display_startup_errors on

Способ 3. Включение вывода ошибок на экран через index.php

Опять затронем файлы в корне Друпала, но на этот раз index.php . Здесь для вывода сообщений надо перед строкой с подключением bootstrap.ini добавить error_reporting(7):

Error_reporting (7 ) ; require_once "./includes/bootstrap.inc" ;

Способ 4. Включение вывода ошибок на экран через settings.php

Сразу скажу, этот способ действует только для Drupal 7 . В папке sites/default/ есть файл settings.php. Откройте его и добавьте вот эти строки:

Error_reporting (-1 ) ; $conf [ "error_level" ] = 2 ; ini_set ("display_errors" , TRUE ) ; ini_set ("display_startup_errors" , TRUE ) ;

При отладке скриптов на PHP обычное дело заполучить в браузере «белый экран». Что в большинстве случаев говорит об остановке выполнения PHP кода из-за ошибки. PHP интерпретатор позволяет выводить служебную информацию об ошибках на экран, что существенно облегчает отладку. Но по-умолчанию (в большинстве случаев) такое поведение из соображений безопасности отключено, то есть сообщения об ошибках PHP на экран не выводятся.

В этой статье я расскажу как заставить PHP выводить сообщения об ошибках на экран монитора в окне браузера. Инструкция справедлива для случая когда вы используете веб сервер Apache и если PHP для Вашего сайта подключен как модуль Apache.

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

Включение вывода ошибок PHP на экран с помощью файла.htaccess

Это очень удобный способ для отладки PHP кода. Работает практически во всех случаях. В папку со скриптом на сайте помещаем файл.htaccess со следующим содержимым:

Php_flag display_errors on php_flag display_startup_errors on php_flag error_reporting E_ALL

  • display_errors - включает опцию для вывода ошибок на экран вместе с остальным кодом.
  • display_startup_errors - включает опцию вывода ошибок, возникающих при запуске PHP, когда еще не работает директива display_errors.
  • error_reporting - указывает, какие ошибки выводятся по уровню значимости. При значении директивы E_ALL отображаются все ошибки.

Включение вывода ошибок PHP на экран в коде файла PHP

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

Ini_set("display_errors", 1); ini_set("display_startup_errors", 1); ini_set("error_reporting", E_ALL);

Включение вывода ошибок PHP на экран с помощью файла php.ini

Этот способ актуален когда вы являетесь администратором сервера. В файле php.ini отредактируйте следующие строки (добавьте при необходимости):

Display_errors = On display_startup_errors = On error_reporting = E_ALL

Лучший способ вывода PHP ошибок на экран

На мой взгляд обычному пользователю удобнее всего использовать .htaccess , особенно если у вас больше чем один PHP файл. Способ №2 удобен для отладки одного php файла, чтобы не затрагивать уровень вывода ошибок для других php скриптов. Вариант с php.ini подойдет только администраторам сервера, но зато его действие распространяется на все сайты расположенные на данном сервере.

Благодарности

При написании статьи были использованы следующие источники.

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

Сегодня рассмотрим несколько методов включения вывода ошибок в php.

Любой, даже самый опытный, программист регулярно допускает ошибки в коде. Пусть это будут мелкие опечатки или серьёзные провалы в алгоритме, не важно, отслеживание ошибок очень важная часть в разработке. Ниже описаны несколько способов отслеживания ошибок в php коде.

Способ первый. Включение вывода ошибок в php файле.

Вы можете включить вывод ошибок непосредственно в самом файле, где вы пишете код. Для этого поместите в его начало следующие строки:

ini_set("display_errors", 1); ini_set("display_startup_errors", 1); error_reporting(E_ALL);

ini_set ("display_errors" , 1 ) ;

ini_set ("display_startup_errors" , 1 ) ;

error_reporting (E_ALL ) ;

После этого просто запустите файл, если в коде будут ошибки, то они отобразятся на странице.

Способ второй. Включение отображения ошибок в файле php.ini.

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

error_reporting = E_ALL display_errors = On display_startup_errors = On

error_reporting = E_ALL

display_errors = On

display_startup_errors = On

После сохранения изменений в файле перезагрузите ваш сервер и изменения вступят в силу.

Способ третий. Включение вывода ошибок в файле.htaccess.

Ещё одним способом включения ошибок является внесение изменений в файл.htaccess. Для этого найдите данный файл в файловой системе вашего сайта и внесите в него следующие строки:

php_value display_errors 1 php_value display_startup_errors 1 php_value error_reporting E_ALL

php_value display _ errors1

php_value display_startup _ errors1

php_value error_reporting E_ALL

Будьте внимательны, так как некоторые CMS системы имеют ещё один файл под названием htaccess.txt, который служит образцом для внесения корректировок. Вам необходимо изменить именно файл.htaccess, в противном случае изменения не будут ни как влиять на вывод ошибок.

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