Вообще-то тема правильно должна называться «Директивы контроля ошибок», но поскольку профессионалам эта информация давно известна, а новичкам такое название темы мало что сообщит, статья названа так, как названа. Изложенный материал в основном рассматривается применительно к форумам 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 может и не дать желаемого результата.
Вот еще полезные ссылки по этой теме:
[FAQ] .htaccess .htpasswd
Использование функции error_reporting с примерами, изменения в константах в зависимости от версий PHP
Настройки конфигурации протоколирования событий и ошибок
Статья написана для двух проектов - vbsupport.ru и wmboard.net, копирование на другие ресурсы без указания источника… не приветствуется.
Автор: Fiesta
Замечания и поправки: Luvilla