В данной статье рассмотрим не конкретные ошибки (это уже сделано здесь), а методологию как их выявлять и работать с ними.
Лог ошибок
Включить запись ошибок в лог
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Отловленные ошибки записываются в файл debug.log в папку wp-content.
Показ ошибок только для администратора
Можно использовать специальный GET-параметр для включения режима DEBUG
if ( isset( $_GET['debugmode'] ) && 'debugmode' == $_GET['debugmode'] ) {
define( 'WP_DEBUG', true );
} else {
define( 'WP_DEBUG', false );
}
Режим отладки будет доступен по добавке к URL:
/?debugmode=debugmode
Режим отладки по конкретному IP:
if ('YOUR_IP_ADDRESS' == $_SERVER['REMOTE_ADDR']) {
define('WP_DEBUG', true);
} else {
define('WP_DEBUG', false);
}
Ошибки не выводяться
Это может происходить из-за того что где то в функциях темы или плагинов прописаны функции отключения вывода ошибок, и они перебивают изначальные настройки
error_reporting(0); // отключает сообщения об ошибках
ini_set('display_errors', 0); // отключает показ ошибок на экран
Чтобы принудительно снова включить отображение ошибок, нужно позже прописать эти же функции:
error_reporting(E_ALL); // включаем сообщения об ошибках
ini_set('display_errors', 1); // включаем показ ошибок на экран
Но лучше конечно найти где они прописаны и убрать.
Не ведется лог ошибок
Это может быть связано с настройками сервера. Потому что на сервере в файле /etc/php-fpm.d/www.conf (в самом конце) по умолчанию установлено:
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
Вот эти параметры не могут быть перекрыты вызовом ini_set(), в результате чего сделать вывод лога ошибок в wp-content/debug.log не получается.
Для решения нужно закомментировать эти строки и перезапустить php-fpm. После чего файл лога будет успешно создаваться и лог ошибок будет записываться в wp-content/debug.log.
Запись в лог ошибок
Чтобы занести запись в лог ошибок, например при отладке какого-либо кода, делается это так:
error_log('something..');
Игнорирование ошибок
Некоторые ошибки блокируют работу админки. В этом случае в wp-config можно попробовать это:
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
Отдельный шаблон для ошибок
Создаём файл php-error.php в папке /wp-content/ и добавляем в него примерно такое содержимое:
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1">
<title>Error</title>
<style>
body *{font-family: Arial, Helvetica Neue, sans-serif; font-size:18px;text-align:center;padding:10px;margin:10px auto;max-width:728px;}body{background:#444;color:#eee}h1{font-size:32px}a{color:gold;}
</style>
</head>
<body>
<section>
<h1>На сайте произошла ошибка</h1>
<p>Мы устраним эту проблему в ближайшее время.</p>
<p><a href="/">Перейти на главную страницу</a></p>
</section>
<!-- <footer>Администрация сайта</footer> -->
</body>
</html>
Теперь при срабатывании ошибки пользователи будут видеть эту страницу.
[site-socialshare]