Своё сообщение при ошибке Error establishing a database connection в WordPress

Рад видеть!

Отлично, когда сайт работает исправно и никаких ошибок не возникает. Однако так бывает не всегда. Если вы пользуетесь услугами хостинга или даже выделенного сервера, то всё равно в пик нагрузки сайт сможет перестать выполнять свои обязанности, демонстрируя достаточно сухое сообщение «Error establishing a database connection».

Штатное сообщение об ошибке при потере доступа к базе данных

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

Ошибка о потере доступа к базе данных пользователям ничего не говорит. Мало кто попробует перезагрузить страницу, перейти на главную страницу сайта, ведь потеря доступа к базе данных может быть весьма кратковременной. Большинство посетителей, увидев такое ни о чём не говорящее сообщение на английском языке, просто закроет вкладку и уйдёт искать интересующую информацию на других ресурсах. И это, согласитесь, весьма неприятно.

Было бы замечательно, если можно было бы за место этого сухого текста вывести страницу с информацией, а ещё осуществлялась бы попытка всё-таки отобразить запрашиваемый контент. И в WordPress такая возможность существует.

Выводим свою страницу в WordPress при ошибке Error establishing a database connection custom в WordPress

  1. Для этого потребуется создать файл под именем db-error.php в любом редакторе (к примеру, Notepad++).
  2. Теперь в него необходимо вписать содержание, что будет выводиться при появлении ошибки. Вот типовой код:
    <?php
    $page = $_SERVER["REQUEST_URI"];
    $sec = "5";
    
        header('HTTP/1.1 503 Service Temporarily Unavailable');
        header('Status: 503 Service Temporarily Unavailable');
    	header("Refresh: $sec; url=$page");
    ?>
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<meta http-equiv="content-language" content="ru-ru">
    		<meta name="robots" content="noindex,follow" />
    		<meta name="viewport" content="width=device-width" />
    		<title>Ошибка 503 - Service Unavailable</title>
    		<style type="text/css">
    body {
    		background-color:#fff;
    }
    #msg {
    		font-family:arial, verdana, sans-serif; font-size:12pt; color:#444; font-weight:normal;
    }
    		</style>
    	</head>
    	<body>
    		<br><br>
    		<div align="center">
    			<table><tr><td width="700px">
    				<div id="msg">
    					<h1>Кажется, что-то пошло не так...</h1>
    					Либо у нас что-то не сработало, либо в данный момент сервер сильно перегружен.<br><br>
    					Обновите страницу - вполне возможно, что проблема исчезнет.<br>Если Вы продолжаете видеть это сообщение, то напишите на<br> <a href="mailto:example@example">example@example</a>, и сообщите все подробности.<br><br>
    					Пока что попробуйте открыть главную страницу нашего сайта, вдруг заработает...<br><br>
    					<a href="https://example">Перейти на главную страницу сайта</a><br><br>
    				</div>
    			</td></tr></table>
    		</div>
    	</body>
    </html>

    Вы, естественно, можете отредактировать его на своё усмотрение – указать, что проблема временная, куда написать, если отображается это сообщение и т.п. Можете добавить графическое содержание, стили и т.д.

    Думаю, что необходимо пояснить назначение вот этой строки в коде:

    header("Refresh: $sec; url=$page");

    Если на хостинге или сервере возникли проблемы, и при этом посетитель попытался посмотреть интересующую его страницу на сайте, то ему будет выведено сообщение (которое вы сами зададите). Однако пока открыта данная страница, браузер каждые 5 секунд будет её обновлять, и если доступ к базе данных вернётся, то отобразится ровно та информация, за которой и пришёл пользователь. Это действительно полезная вещь, которая помогает «не потерять» посетителя, если он зашёл на ваш сайт в момент кратковременного сбоя соединения с базой данных.

  3. Сохранив файл db-error.php с вписанным содержанием, останется его только загрузить к другим файлам на хостинге\сервере. Его необходимо расположить в папке под именем wp-content.

    Расположение файла db-error.php

  4. Всё, задача выполнена.

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

Пожертвование сайту WPuse.ru (cбор пожертвований осуществляется через сервис Яндекс Деньги)