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

  • Автор темы Ночная странница
  • 3173
  • Обновлено
  • 04, Mar 2013
  • #1
Вообще-то тема правильно должна называться «Директивы контроля ошибок», но поскольку профессионалам эта информация давно известна, а новичкам такое название темы мало что сообщит, статья названа так, как названа. Изложенный материал в основном рассматривается применительно к форумам 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 может и не дать желаемого результата. Вот еще полезные ссылки по этой теме:
Использование функции error_reporting с примерами, изменения в константах в зависимости от версий PHP

Настройки конфигурации протоколирования событий и ошибок

Статья написана для двух проектов - vbsupport.org и lumtu.com, копирование на другие ресурсы без указания источника… не приветствуется.
Автор: Ночная странница
Замечания и поправки: Льюви



Ночная странница


Рег
30 Jan, 2012

Тем
98

Постов
1642

Баллов
2622
Тем
49554
Комментарии
57426
Опыт
552966

Интересно