В предыдущей части мы создали WordPress-проект и приступили к редактированию кода. Теперь поговорим о том, как выявить и исправить ошибки в созданном коде.
Рабочий публичный сервер должен быть настроен так, чтобы сообщения об ошибках вообще не выводились — из соображений безопасности, да и просто из эстетических соображений. Вывод ошибок можно запретить на уровне сервера (в php.ini), а также на уровне скрипта (с помощью функций ini_set() и error_reporting()). Например, чтобы гарантировано подавить вывод ошибок на вашем WordPress-сайте в независимости от настроек сервера, в wp-config.php надо добавить:
define('WP_DEBUG', false); @ini_set('display_errors', 0);
Теперь в случае ошибки посетитель увидит страницу Internal Server Error.
При разработке же все наоборот — вывод ошибок очень важен и полезен. Поэтому на сервере, используемом для разработки, вывод ошибок обязательно включаем (php.ini : display_errors = 1). В Zend Server вывод ошибок включается через панель управления Server Setup -> Directives -> Error Handling and Logging -> display_errors поставить On. Там же устанавливаем значение директивы error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT (вывод всех ошибок и предупреждений, кроме уведомлений). E_NOTICE и E_STRICT — это некритичные уведомления о соблюдении стандартов кодирования, они не влияют на работоспособность кода. Подробнее об уровнях ошибок.
Теперь возвращаемся к wp-config.php. По умолчанию режим отладки отключен:
define('WP_DEBUG', false);
Но это не значит, что ошибки не выводятся.
На самом деле error_reporting = E_ALL & ~E_NOTICE & ~E_USER_NOTICE.
Включение режима отладки:
define('WP_DEBUG', true);
означает error_reporting = E_ALL (вывод вообще всех ошибок и уведомлений), также на экран будут выводиться ошибки SQL-запросов.
Итак, что в итоге?
Для вывода фатальных ошибок и предупреждений достаточно значения по умолчанию:
define('WP_DEBUG', false);
Если вывод ошибок отключен на уровне сервера, то его можно включить на уровне скрипта:
@ini_set('display_errors', 1);
Когда нужен вывод ошибок SQL, и для устранения мелких погрешностей кода (вот здесь будут полезны уведомления), используем режим отладки:
define('WP_DEBUG', true);
Отключение вывода ошибок на экран, но при этом запись ошибок в лог-файл (wp-content/debug.log):
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false); @ini_set('display_errors', 0);
Еще один момент, который стоит учитывать — некоторые WordPress-плагины могут без всякого предупреждения вмешаться в процесс вывода ошибок. Например известный плагин WP-SpamFree полностью подавляет вывод ошибок не смотря на значение константы WP_DEBUG. Явный симптом error_reporting(0) — белый экран, вместо сообщения об ошибке.
Явные ошибки — найти и устранить легче всего. В тексте ошибки обычно указывается имя файла и номер строки, где произошла ошибка. Другое дело, когда явных ошибок нет, но код работает не так как вы планировали. Вот здесь уже нужен отладчик (debugger). Читайте далее: Отладка кода WordPress-проетка с помощью Zend Debugger и Eclipse PDT.