Язык PHP широко применяется для многих веб-приложений, таких как WordPress. Как бы ни был мощен PHP, у него есть некоторые недостатки, но одна из моих любимых особенностей PHP — это то, что он будет отображать ошибки прямо на веб-странице. Новая панель инструментов, представленная в WordPress 3.3, мешает этой функции. Панель инструментов имеет фиксированную абсолютную позицию, которая охватывает первые несколько строк ошибок PHP.
Варианты отображения ошибок
С новой панелью инструментов, покрывающей ошибки PHP, нам нужно использовать другие опции для отладки наших тем и плагинов. К счастью для нас, у нас есть несколько вариантов на выбор.
Плагины
С момента создания нового плагина панели инструментов разработчики разработали несколько плагинов, которые могут помочь нам в этой проблеме. Вот пара плагинов, которые вы можете использовать, чтобы отключить панель инструментов.
- Старая школа администраторов школы
- Скрыть плагин панели инструментов
- Чистое удаление админ-бара
- Улучшена админ-панель WordPress
Все эти плагины предлагают различные функции, но все они позволяют нам отключить панель инструментов. Что позволит нам просматривать любые ошибки 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. Если у кого-то есть другое решение, пожалуйста, оставьте его в комментариях. Я хотел бы увидеть, что вы придумали.