Більше результатів...

Загальні селектори
Тільки точні збіги
Шукати у заголовках
Шукати у контенті
Вибір типів постів
Фільтрувати за категоріями
FAQ
Hostenko
Натхнення
Відео уроки
Новини
Плагіни
Теми
Уроки
Хакі

Мова PHP широко поширена в багатьох веб-додатках, наприклад, WordPress. При всій своїй потужності PHP має деякі недоліки, але одна з моїх улюблених особливостей PHP – це те, що він відображає помилки прямо на сторінці. Нова панель інструментів, яка з'явилася у WordPress 3.3, конфліктує з цим функціоналом. Ця панель має абсолютне позиціонування, при якому перші кілька рядків помилок PHP закриваються.

Варіанти відображення помилок

З новою панеллю інструментів, що закриває помилки PHP, нам потрібно використовувати інші можливості для налагодження наших тем та плагінів. На щастя, ми маємо кілька варіантів для вибору.

inet.ws - Powerful VPS Hosting в США, Canada, UK та DE!

Плагіни

Після появи нової панелі інструментів розробники плагінів представили кілька варіантів, які можуть допомогти нам із цим питанням. Ось кілька плагінів, які можна використовувати, щоб вимкнути панель інструментів.

  • Old Skool Admin Head
  • Hide Toolbar Plugin
  • Clean Admin Bar Removal
  • WordPress Admin Bar 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);  
}

Цей код виводитиме помилки PHP у файл під назвою debug.log в папці WP-зміст. Таке записування помилок має свої плюси та мінуси. Під час роботи над комерційним плагіном у команді журналування помилок необхідне.

Це найкраще рішення для відстеження своїх помилок, але при розробці плагіна чи теми меншого масштабу це просто непрактично. Коли вам потрібно лише перевірити остаточно дрібниці, можливо трохи незручно постійно відкривати, закривати і знову відкривати файл помилок щоразу при внесенні змін.

Відображення помилок як повідомлень адміністратора

Метод, який я вибрав для себе – це виводити помилки PHP як повідомлення адміністратора. Мені здається, на даний момент це найкраще рішення. Не вимагає плагінів, зручніше, ніж журнал помилок, і це можна зробити без шкоди для структури та дизайну консолі або вашої теми WordPress.

Код, що використовується для цього, — простий, і я все не можу зрозуміти, чому він не був вбудований як частина ядра WordPress. Наведений нижче код потрібно вставити у файл 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 показує це число;
  • $errstr : видає повідомлення про помилку;
  • $errfile : видає ім'я файлу, у якому міститься помилка;
  • $errline : видає рядок, у якому міститься помилка

масив $errorType визначає назву, яка використовується кожного типу помилки.

Наприклад:

УВАГА помилка: [2] include(wuzup) [function.include]:

Ця назва може бути будь-яким, на ваш розсуд. Ви можете сказати "Гей, ти щось наплутав".

Наприклад:

УВАГА Гей, ти щось наплутав: [2] include(wuzup) [function.include]:

Я не рекомендую використати це для чогось, що ви робите для клієнтів. Хіба що у них справді гарне почуття гумору. Але ви зрозуміли, чого я.

Умова IF перевіряє, чи збігається тип помилки з якоюсь із констант, визначених вами в масиві $errorType. Якщо ні, назва помилки буде показана як "UNKNOWN ERROR".

Остання частина функції – те, що ми виводимо. Клас помилка – стандартний клас, вбудований у WordPress, який використовується як стиль для повідомлень адміністратору про помилки.

Щоб ініціалізувати функцію admin_alert_errors(), ви будете використовувати функцію set_error_handler (). Перший параметр – це функція, яка використовувалася для виведення помилок. В даному випадку, це функція admin_alert_errors(). Наступний набір параметрів – це стандартні помилки PHP, які потрібно показувати.

Якщо у вас є досвід роботи з помилками, ви помітите, що E_STRICT у цьому списку немає. Це тому, що є деякі помилки, які видаються самим ядром WordPress. Я не знаю, чи це якийсь недогляд розробників ядра WordPress, або так було потрібно, але в будь-якому випадку, бачити ці помилки не обов'язково. Також, використання E_ALL замість списку всіх стандартних помилок, схоже, не працює. Якщо ви будете використовувати E_ALL, не всі помилки будуть відображатися як повідомлення адміністратору.

Зверніть увагу: це не впливає на те, як помилки будуть відображатись у клієнтській частині вашого сайту. Лише на сторінках адміністратора.

Також зверніть увагу: коли у мене була встановлена ​​тестова версія WordPress, я отримав ЗНИЖЕНИЙ помилку для файлу class-simplepie.php.

Я сподіваюся, цей посібник допоможе вам з цими прикрими помилками PHP. Якщо хтось має інші рішення, будемо раді побачити їх у коментарях.

Джерело: WP.tutsplus.com
inet.ws - Powerful VPS Hosting в США, Canada, UK та DE!
Олексій Шевченко
редактор wpcafe
Вивчає сайтобудування з 2008 року. Практикуючий вебмайстер, що спеціалізується на створенні сайтів WordPress. Задати питання Олексію можна на https://profiles.wordpress.org/wpthemeus/

Коментарі до запису: 0

Додати коментар або відгук