Ошибки подключения к базе в Битриксе. Свой текст ошибки

Если в настройках установлен вывод ошибок, то при возникновении ошибок базы данных Битрикс выводит на страницу сайта SQL запрос, который закончился ошибкой. . Это небезопасно, потому что в таком случае посетители сайта могут понять, как устроена база данных и выяснить слабые места сайта. Поэтому рекомендуем сделать страницу-заглушка, которая будет показываться вместо ошибки.

Попробуем принудительно вызвать SQL ошибку на сайте, чтобы посмотреть как она выглядит. Для этого на любой странице сайта напишем код, который обращается к базе данных:
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
global $DB;
$sql = 'SELECT * FROM';
$DB->Query($sql);
?>
Если загрузить страницу с таким кодом, то битрикс сообщит об ошибке и будет выведена только половина страницы до возникшей ошибки. Сообщение об ошибке будет выглядеть так: Можно такой вывод ошибки на собственную страницу, на которой можно написать, к примеру, обращение к пользователям сайта. Для создания такой страницы необходимо в папке сайта /bitrix/php_interface/ создать файл PHP файл с названием dbquery_error.php.
Рекомендуем ознакомиться со статьёй "Загрузка файлов на сайт с помощью FileZilla", в которой описан процесс работы с программой, которая может загрузить файл с вашего компьютера на сервер с сайтом. А так же с одной из статей. описывающих редактор файлов на сервере: "Средство разработки: Notepad++" или "Средство разработки: Atom"
После создания dbquery_error.php, вставьте в этот файл следующий код для обработки ошибки. В начале кода должны содержаться функции, которые очистят буфер вывода, иначе сообщение об ошибке все равно будет выведено:
<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$str = ob_get_contents(); // здесь находится сообщение об ошибке
ob_clean(); // очищаем буфер вывода
?>
Ой! В нашей базе данных случилась ошибка. Пожалуйста, напишите нам на "мэйл@адрес.ru", если видите это сообщение. Спасибо!
Первая строчка в примере if(!defined("B_PROLOG_INCLUDED") ... die(); не позволит скрипту выполниться, если пользователь перейдёт по адресу ваш_сайт.ru/bitrix/php_interface/dbquery_error.php. Код будет выполняться, только если он вызван из другого скрипта.
Чтобы иметь оперативную связь можно запрограммировать автоматическую отсылку мэйла на адрес техподдержки сайта внутри файла dbquery_error.php. Потому что если этот файл будет исполнен, то это значит, что ошибка уже есть на сайте. Поэтому предлагаем дописать предыдущий пример, добавив код отправки мэйла:
<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$str = ob_get_contents(); // здесь находится сообщение об ошибке
ob_clean(); // очищаем буфер вывода

// посылаем отчет об ошибке нам
   global $APPLICATION;
   $curPage = $APPLICATION->GetCurPage(); // адрес страницы сайта, на которой возникла ошибка

   $eol = "\n";
   $to = 'мэйла@адрес_техподдержки.ru'; // кому отправлять мэйл

   $subject = 'Ошибка MySql ' . date("Y-m-d H:i:s"); // дата возникновения ошибки
   $message = 'Ошибка MySql:' . $str . $eol;
   $message = 'Возникла на странице: ' . $curPage . $eol;
   $message = wordwrap($message, 900, $eol); // ограничение ширины строки в письме

   $head   = array();
   $head[] = "MIME-Version: 1.0";
   $head[] = "Content-type: text/plain; charset=UTF-8";
   $head[] = "From: мэйл@адрес_сайта.ru <мэйл@адрес_сайта.ru>"; // от кого отправлять мэйл
   $head[] = "Subject: " . $subject;

   $a = mail($to, $subject, $message, implode("\r\n", $head));
?>
Ой! В нашей базе данных случилась ошибка. Пожалуйста, напишите нам на "мэйл@адрес.ru", если видите это сообщение. Спасибо!
В этом примере замените адрес "Кому" и "От кого" для правильной отправки мэйла.
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: