Отображать ошибки PHP как оповещения администратора WordPress

14 января 2018

Язык PHP широко используется для многих веб-приложений, таких как WordPress. Такой мощный, как PHP, он имеет некоторые недостатки, но одна из моих любимых функций PHP заключается в том, что он отображает ошибки прямо на веб-странице. Новая панель инструментов, введенная в WordPress 3.3, препятствует этой функциональности. Панель инструментов имеет фиксированную абсолютную позицию, которая охватывает первые несколько строк ошибок PHP.


Опции для отображения ошибок

При использовании новой панели инструментов, содержащей ошибки PHP, нам нужно использовать другие параметры для отладки наших тем и плагинов. К счастью для нас, есть несколько вариантов выбора.


Плагины

После появления новых разработчиков плагинов панели инструментов появились несколько плагинов, которые могут помочь нам в этой проблеме. Вот несколько плагинов, которые вы можете использовать для отключения панели инструментов.

Old Skool Admin HeadNHide Toolbar Панель управления PluginClean Панель администратора RemovalnWordPress Панель администратора Improved

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


Регистрация ошибок

Решение ошибок PHP, предложенное основной командой WordPress, заключается в использовании журнала ошибок. Если вы разрабатываете WordPress, вы уже должны знать о константе WP_DEBUG, которая определена в файле wp-config.php. Вы также можете определить константу WP_DEBUG_LOG. Вот пример, который WordPress Codex дает для включения журнала отладки.

define('WP_DEBUG', true); // false
if (WP_DEBUG) {
  define('WP_DEBUG_LOG', true);
  define('WP_DEBUG_DISPLAY', false);
  @ini_set('display_errors',0);
}

This выводит любые ошибки PHP в файл с именем debug.log в папке wp-content. Ошибки регистрации, подобные этому, имеют взлеты и падения. При работе с коммерческим плагином или при работе в командной среде, где необходимы ошибки ведения журнала. Это лучшее решение для отслеживания ваших ошибок, но при разработке плагина или темы в меньшем масштабе это просто нецелесообразно. Когда все, что вам нужно сделать, это убедиться, что все ваши я усеяны, а T пересекаются. Очень сложно раскрыть, закрыть и повторно открыть журнал ошибок каждый раз, когда вы вносите изменения.


Ошибки отображения в качестве предупреждений администратора

Приведенный мной метод заключается в выводе ошибок PHP в качестве предупреждений администратора. Я думаю, что это лучшее решение. Плагины не нужны, это более удобно, чем регистрация ошибок, и его можно оставить на месте, не мешая макете и дизайну области администратора или тем WordPress.

Код, используемый для достижения этого, прост, и я не могу понять, почему это не является встроенной частью WordPress Core. Следующий код должен быть помещен в ваш файл functions.php или в ваш плагин функциональности.

function admin_alert_errors($errno, $errstr, $errfile, $errline){
    $errorType = array (
         E_ERROR                            => 'ERROR',
         E_CORE_ERROR           => 'CORE ERROR',
         E_COMPILE_ERROR        => 'COMPILE ERROR',
         E_USER_ERROR           => 'USER ERROR',
         E_RECOVERABLE_ERROR  => 'RECOVERABLE ERROR',
         E_WARNING              => 'WARNING',
         E_CORE_WARNING         => 'CORE WARNING',
         E_COMPILE_WARNING      => 'COMPILE WARNING',
         E_USER_WARNING         => 'USER WARNING',
         E_NOTICE               => 'NOTICE',
         E_USER_NOTICE          => 'USER NOTICE',
         E_DEPRECATED                   => 'DEPRECATED',
         E_USER_DEPRECATED      => 'USER_DEPRECATED',
         E_PARSE                => 'PARSING ERROR'
    );
    if (array_key_exists($errno, $errorType)) {
        $errname = $errorType[$errno];
    } else {
        $errname = 'UNKNOWN ERROR';
    }
ob_start();?>
<div class="error">
  <p>
    <strong><?php echo $errname; ?> Error: [<?php echo $errno; ?>] </strong><?php echo $errstr; ?><strong> <?php echo $errfile; ?></strong> on line <strong><?php echo $errline; ?></strong>
  <p/>
</div>
<?php
echo ob_get_clean();
}
set_error_handler("admin_alert_errors", E_ERROR ^ E_CORE_ERROR ^ E_COMPILE_ERROR ^ E_USER_ERROR ^ E_RECOVERABLE_ERROR ^  E_WARNING ^  E_CORE_WARNING ^ E_COMPILE_WARNING ^ E_USER_WARNING ^ E_NOTICE ^  E_USER_NOTICE ^ E_DEPRECATED    ^  E_USER_DEPRECATED    ^  E_PARSE );

Выберите четыре аргумента, которые передаются функции admin_alert_errors ().

$ errno: выводит уровень поднятой ошибки. Каждый тип ошибки имеет число, связанное с ним. $ errno показывает, что number$ errstr: выводит сообщение об ошибке$ errfile: выводит имя файла с ошибкой.$ errline: выводит строку с ошибкой.

Атрибут $ errorType определяет название, используемое для каждого типа ошибки.

, т.е. ПРЕДУПРЕЖДЕНИЕ Ошибка: [2] включить (wuzup) [function.include]:

Это может быть все, что вы хотите. Он может сказать: «Wuzup G, вы что-то испортили».

, т.е. ПРЕДУПРЕЖДЕНИЕ Wuzup G, вы messed Something Up: [2] include (wuzup) [function.include]:

Я не рекомендую использовать это для всего, что вы делаете для клиента, если у них нет действительно хорошего чувства юмора, Но ты получил идею.

Инструкция IF проверяет, соответствует ли тип ошибки любой из констант ошибок, которые вы определили в массиве $ errorType. Если нет, тогда заголовок ошибки будет отображаться как «НЕИЗВЕСТНАЯ ОШИБКА»

. Последняя часть функции - это то, что будет выведено. Ошибка класса - это класс по умолчанию, встроенный в WordPress, используемый для создания предупреждений об ошибках администратора.

Чтобы инициировать функцию admin_alert_errors (), вы будете использовать функцию set_error_handler (). Первый параметр - это функция, используемая для отображения ошибок. В этом случае функция admin_alert_errors (). Следующий набор параметров - это константы ошибок PHP, которые вы хотите отобразить.

Если у вас есть опыт работы с обработкой ошибок, вы заметите, что E_STRICT не включен. Это связано с тем, что есть некоторые ошибки, которые поступают из WordPress Core. Я не уверен, что это что-то упустило из-за команды Core WordPress или если оно по дизайну, но в любом случае нет необходимости просматривать эти ошибки. Кроме того, использование E_ALL вместо перечисления всех констант ошибок не работает. Если вы используете E_ALL, не все ошибки будут отображаться как уведомления администратора.

ote: Это не влияет на то, как отображаются ошибки во внешнем интерфейсе вашего сайта. Только на страницах администратора.

Примечание: когда у меня установлены данные теста WordPress. Я получаю ошибку DEPRECATED для файла class-simplepie.php.


Заключение

Well, я надеюсь, что это поможет вам с этими надоедливыми ошибками PHP. Если у кого-то есть другое решение, отправьте его в комментариях. Я с удовольствием посмотрю, с чем вы столкнулись.