Для начала простой рецепт:
Для включения вывода ошибок 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_ERROR | 1 | 1 |
E_WARNING | 2 | 10 |
E_PARSE | 4 | 100 |
Зная значения констант можно легко варьировать уровень вывода ошибок, при этом нет необходимости переводить числа из десятичного представления в двоичное и обратно вручную. Нам поможет стандартный калькулятор Windows (замечу, что калькулятор, встроенный в (x)Ubuntu имеет схожие возможности). Запустим калькулятор и переведем его в режим «Программист» с помощью меню «Вид» как это показано на рисунке.
Убедимся, что калькулятор находится в десятичном режиме ввода (радио-баттон в положении «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 и многочисленные предупреждения не будут нам мешать, в то же время мы будем получать сообщения обо всех ошибках, приводящих к падению скрипта.