Статьи

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

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


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


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

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


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

1
2
3
4
5
6
define(‘WP_DEBUG’, true);
if (WP_DEBUG) {
  define(‘WP_DEBUG_LOG’, true);
  define(‘WP_DEBUG_DISPLAY’, false);
  @ini_set(‘display_errors’,0);
}

Это выведет все ошибки PHP в файл с именем debug.log в папке wp-content. Журналирование ошибок, как это имеет свои взлеты и падения. При работе с коммерческим плагином или при работе в командной среде, где необходимо регистрировать ошибки. Это лучшее решение для отслеживания ваших ошибок, но при разработке плагина или темы в меньшем масштабе это просто не практично. Когда все, что вам нужно сделать, это убедиться, что все ваши «я» отмечены пунктирной линией, а «Т» перечеркнуты. Может быть очень неприятно открывать, закрывать и заново открывать журнал ошибок каждый раз, когда вы вносите изменения.


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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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;
  <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 отображает это число.
  • $ errstr: выводит сообщение об ошибке.
  • $ errfile: выводит имя файла с ошибкой.
  • $ errline: выводит строку с ошибкой.

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

например, ошибка WARNING: [2] include (wuzup) [function.include]:

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

например, ПРЕДУПРЕЖДЕНИЕ Wuzup G, вы что-то напутали : [2] include (wuzup) [function.include]:

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

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

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

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

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

примечание: это не влияет на способ отображения ошибок в веб-интерфейсе вашего сайта. Только на страницах администратора.

еще одно примечание: когда у меня установлены данные теста WordPress. Я получаю УСТАРЕЛО ошибку для файла class-simplepie.php.


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