Поиск по блогу

воскресенье, 4 октября 2015 г.

Включение error_reporting в .htaccess

Для начала простой рецепт: 

Для включения вывода ошибок php в файле .htaccess необходимо добавить строку
php_value error_reporting 7
php_flag display_errors On
Эта запись соответствует включению вывода ошибок уровня «E_ERROR | E_WARNING | E_PARSE»
Для отключения вывода ошибок, включенного в php.ini используйте
php_value error_reporting 0
php_flag display_errors O

Теперь подробнее:

В интернете гуляет множество рецептов, предлагающих устанавливать вывод ошибок с помощью конструкции
php_value error_reporting “E_ALL & ~E_NOTICE”
но во многих случаях это не работает.
Для установки уровня сообщений об ошибках php требуется указать битовую маску, которая в десятичном представлении является целым положительным числом. Когда в php-коде в параметрах функции error_reporting мы указываем значение, например вида E_ERROR | E_WARNING | E_PARSE, на самом деле мы передаем результат действий над именованными константами php, имеющими значение типа int. С помощью документации легко убедиться что функция error_reporting в качестве параметра ожидает получить отнюдь не строку, а целое числовое значение.
Давайте разберемся, что это за зверь такой — битовая маска.
Если открыть список констант php, ответственных за установку уровня вывода ошибок, то можно заметить, что числовое значение каждой из них является «круглым» в двоичном представлении. То есть в двоичном виде константы будут выглядеть в виде одной единицы в старшем разряде и нескольких нулей после нее. Например:
КонстантаДесятичное представлениеДвоичное представление
E_ERROR1
  1
E_WARNING2
 10
E_PARSE4
100
Таким образом: выражение E_ERROR | E_WARNING | E_PARSE даст результат 111 в двоичном формате или 7 в десятичном. Эту-то семерку мы и подставили в директиву htaccess php_value error_reporting 7.
Зная значения констант можно легко варьировать уровень вывода ошибок, при этом нет необходимости переводить числа из десятичного представления в двоичное и обратно вручную. Нам поможет стандартный калькулятор Windows (замечу, что калькулятор, встроенный в (x)Ubuntu имеет схожие возможности). Запустим калькулятор и переведем его в режим «Программист» с помощью меню «Вид» как это показано на рисунке.
Переключение калькулятора в режим "Программист"

Теперь допустим, что мы хотим видеть сообщения об ошибках, но не хотим видеть никаких предупреждений (например мы работаем с каким-то старым php-кодом, использующим множество устаревших конструкций).
Убедимся, что калькулятор находится в десятичном режиме ввода (радио-баттон в положении «Dec») и будем последовательно вводить значения констант, отвечающих за вывод ошибок применяя к ним операцию «Or».
Органы управления калькулятора в режиме "Программист"
Константы, ответственные за предупреждения мы пропустим.
Таким образом мы выполним
1 Or 4 Or 16 Or 64 Or 256 Or 4096
что соответствует E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR. После нажатия равно мы получим 4437, что будет соответствовать битовой маске
1000101010101
В файле htaccess мы пропишем php_value error_reporting 4437 и многочисленные предупреждения не будут нам мешать, в то же время мы будем получать сообщения обо всех ошибках, приводящих к падению скрипта.

Комментариев нет:

 
Google+