Статья Управление отображением ошибок PHP

Sam Jack

Капитан-Узурпатор
Команда форума
Созидатель
5 Май 2015
13.917
4.894
113
Россия
null-prog.ru
Вообще-то тема правильно должна называться «Директивы контроля ошибок», но поскольку профессионалам эта информация давно известна, а новичкам такое название темы мало что сообщит, статья названа так, как названа. Изложенный материал в основном рассматривается применительно к форумам vBulletin.

Практически всем админам рано или поздно приходится сталкиваться на своем форуме с ошибками PHP, которые могут выглядеть по разному, начиная с банального «Deprecated: Assigning the return value…» и заканчивая какими-нибудь редкими проблемами с тем или иным хаком. Я хочу рассказать о том, как взять под контроль вывод ошибок, настроить сервер так, чтобы все ошибки выводились сразу в браузер (на этапе отладки) или не выводились вообще. А, может быть, вам удобнее, если они будут записываться в файл?
Управляем этим процессом с помощью директив в в файлах php.ini или .htaccess (зависит от ваших предпочтений и предпочтений хостера, у меня на одном из хостингов написано, что лучше использовать php.ini, а на другом я пользуюсь исключительно файлами .htaccess).


Вопрос 1.
Куда должны выводиться сообщения об ошибках?


1.1. Ваш форум недавно установлен, пользователей еще нет, вы заняты тем, что устанавливаете хаки и разрабатываете дизайн.
В данном случае целесообразно разрешить вывод ошибок сразу в браузер, так как этим вы никого не напугаете, а сами сразу увидите, что они есть.

display_errors on
Это включает отображение ошибок в том браузере, который запустил скрипт.
Соответственно, если вы видите, что у вас в одном из этих файлов прописано
display_errors off
вы уже понимаете, что отображения ошибок в браузере не будет.

1.2. Ваш форум открыт для пользователей, но вы не собираетесь, как страус, прятать голову в песок, и хотите видеть, если когда-то и где-то возникают ошибки.

Ну что ж, тогда вам лучше всего записывать ошибки в файл. Помимо стандартной функции в админке vBulletin, есть еще такая возможность для php.ini или .htaccess:

display_errors off
log_errors on

Что это даст? В браузере ошибки отображаться не будут, но в файл запишутся.
Какой файл? Это тоже можно и нужно указать:

error_log абсолютный путь к файлу

Вопрос 2.
Какие сообщения об ошибках должны выводиться, а какие - нет?


Хороший вопрос. На сайте php.net вы можете посмотреть различные варианты констант, на практике же рекомендуют использовать следующие из них:

(Записывается в файлы как error_reporting константа)

error_reporting E_ALL~E_NOTICE
Такое значение обычно стоит в php.ini на Денвере и означает (сверяемся с таблицей) полный контроль, кроме некритичных предупреждений интерпретатора.

error_reporting E_ALL
Такое значение хорошо при отладке, но может вызвать целый ряд разнообразных предупреждений, которые будут нервировать неопытного администратора.

error_reporting(0)
Выключение протоколирования ошибок

Выбирайте, что вам важно и нужно, настраивайте на свой вкус.

Важное примечание: в скриптах vBulletin (практически во всех) установлен режим вывода ошибок, и, как правило, E_NOTICE там выключен. То есть, перепрописывание этого правила на уровне .htaccess может и не дать желаемого результата.