IMHOblog.ORG » Веб, сайты, движки » DataLife Engine DLE ДЛЕ модули хаки простой треп » Отправка сообщений об mysql ошибках
МЫСЛИ
cms,

php

,
блог
,

веб

,

движки

, женщины, записки инет натуралиста, здоровье,
интернет
, кидалы, мир, модули,

сайтостроение

, сео,
скрипты
, сплетни, феменизм, халява,
юмор
, Яндекс
ВАШЕ МНЕНИИЕ
Почему Вы здесь?

Блог у тебя класный smile
Пришел почитать умные мысли bully
Фиг знает no
Я? Где я? tongue
ПАНЕЛЬ УПРАВЛЕНИЯ
Логин:
Пароль:
 
Новые комментарии
» Есть вопросы? (4)
» Принимаю "заявки" ... (1)
» Просмотры ... (1)
» Кирилические url (2)
» Летнее время ... (5)
Найти на сайте


Точное вхождение
Подписаться на новости сайта
Введите Ваш e-mail:

Вы не робот?
Включите эту картинку для отображения кода безопасности

Отказаться о подписки

  Популярные записи в блоге

Летнее время (перевод часов, ... Сегодня ночью, множество стран мира в очередной раз перевили часы на летнее время, т.е. на один час ...

Есть вопросы? Тут посмотрел статистику посещаемости и подумалось что люди ищут ответы на различные вопросы, чаще ...

Кирилические url Вот как-то так сделал, как видете на блоге появились url в нестандартном зато кириличсеком ...

Просмотры страницы (делаем ... При просмотре новости скрипт DLE считает просмотры (если конечно включено в настройках, вот только ...

Принимаю "заявки" :) Если вам нужно сделать модуль или хак для ДЛЕ, но Вы не знаете как, то вам сюда :) жмем подробнее...

Отправка сообщений об mysql ошибках

Как известно на отечественном хостинге (да и не только) частенько падает БД (База даных ака MYSQL сервер), бывают и другие разные ошибки подключения к БД, но скрипт ДЛЕ равно как и многие другие почему-то не имееют встроенного функционала по отправки администратору на e-mail сообщения об ошибке, в результате админ может узнать об этом уже от посетителей, что не гуд.
Как это поправить читайте ниже.
Вывод ошибки mysql в DLE
Файл отвечающий за вывод ошибки mysql, называется mysql.class.php, лежит этот файл в папке engine/classes, вот с него и начнем.
Посмотрим где же там прячится вывод ошибки, как оказалось это вывод выполнен ввиде функции, имя ей display_error
вот её то и будем править.
Вот её код:
    function display_error($error, $error_num, $query = '')
    {
         if($query) {
            // Safify query
            $query = preg_replace("/([0-9a-f]){32}/", "********************************", $query); // Hides all hashes
            $query_str = "$query";
        }
        
        echo '<?xml version="1.0" encoding="iso-8859-1"?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <title>MySQL Fatal Error</title>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
        <style type="text/css">
        <!--
        body {
            font-family: Verdana, Arial, Helvetica, sans-serif;
            font-size: 10px;
            font-style: normal;
            color: #000000;
        }
        -->
        </style>
        </head>
        <body>
            <font size="4">MySQL Error! </font>
            <br />------------------------<br />
            <br />
            
            <u>The Error returned was:</u>
            <br />
                <strong>'.$error.'</strong>

            <br /><br />
            </strong><u>Error Number:</u>
            <br />
                <strong>'.$error_num.'</strong>
            <br />
                <br />
            
            <textarea name="" rows="10" cols="52" wrap="virtual">'.$query_str.'</textarea><br />

        </body>
        </html>';
        
        exit();
    }

Вот её мы чуть чуть поправим, чтобы он не только выводила инфу об ошибки на страницу но и отправляла e-mail админу.
ниже строки:
    function display_error($error, $error_num, $query = '')
    {

вставляем такое:
// Письмо об ошибке (c) imhoblog.org
    $Name = "admin"; //senders name
    $email = $config['admin_mail']; //e-mail адрес отправителя
    $recipient = $config['admin_mail']; //e-mail адрес получателя
           // Само сообщение
    $mail_body = 'Ошибка подключения к базе данных:
    MySQL Error!:    '.$error.'
    Error Number: '.$error_num.'
    Query: '.$query_str.'
    Time: '.date(c); //mail body
    $subject = "Ошибка подключения к базе данных"; //subject
    $header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields
    mail($recipient, $subject, $mail_body, $header); //mail command
// Письмо об ошибке (c) imhoblog.org

В целом этого достаточно, и если вам не нужны всякие рюшечки типа настройка этого письма и возможности вкл/выкл этой отправки то дальше можете не читать, лично я бы огранисчелся изменениями приведеными выше ;) .


Ну если вы всетаки хотите зделать рюшички то вперед, читаем дальше.
Прежде всего, если вам нужны "рюшечки" то вышеприведенный хак не применяем, делаем по другому, а именно:
Идем в phpmyadmin и выполняем там sql запрос:
INSERT INTO `dle_email` (`id` , `name` , `template`) VALUES (NULL , 'mysql_error', 'Уважаемый Администратор,\r\n\r\nуведомляем вас о том, что на сайте  {%site%} произошла ошибка mysql.\r\n\r\n------------------------------------------------\r\nИнформация об ошибке: \r\n------------------------------------------------\r\n\r\nДата ошибки: {%date%}\r\nЗапрос вызвавший ошибку: {%sql%}\r\nНомер ошики: {%num-error%}\r\n\r\n------------------------------------------------\r\n\r\nС уважением,\r\n\r\nСкрипт mysql.class.php с сайта {%site%}');

После чего возвращаемся к файлу (который не содержит изменений приведеных в этом посте выше) mysql.class.php
ниже строки:
    function display_error($error, $error_num, $query = '')
    {

вставляем:

             if($config['send_error']){ // проверка на вкл/выкл
                include_once ENGINE_DIR.'/classes/mail.class.php';
                $mail = new dle_mail ($config);

                $mail_template = $db->super_query("SELECT template FROM " . PREFIX . "_email WHERE name='mysql_error' LIMIT 0,1");

                $mail_template['template'] = stripslashes($mail_template['template']);
                $mail_template['template'] = str_replace("{%site%}", $config['http_home_url'], $mail_template['template']);
                $mail_template['template'] = str_replace("{%date%}", langdate("j F Y H:i", $_TIME), $mail_template['template']);
                $mail_template['template'] = str_replace("{%sql%}", $error, $mail_template['template']);
                $mail_template['template'] = str_replace("{%num-error%}", $error_num, $mail_template['template']);

                $body = stripslashes(stripslashes($body));
                $body = str_replace ("<br />", "\n", $body);
                $body = strip_tags ($body);

                $mail->send ($config['admin_mail'], $config['admin_mail'], $mail_template['template']);
            } // проверка на вкл/выкл

Теперь идем в админку
а именно в файл engine/inc/email.php
там находимтакие строки:
<table width="100%">
    <tr>
        <td bgcolor="#EFEFEF" height="29" style="padding-left:10px;"><div class="navigation">{$lang['mail_info_6']}</div></td>
    </tr>
</table>
<div class="unterline"></div>
<table width="100%">
    <tr>
        <td style="padding:2px;">{$lang['mail_pm_info']}</td>
    </tr>
    <tr>
        <td style="padding:2px;"><textarea rows="15" style="width:650px;" name="new_pm_text">{$pm}</textarea>
<br /><br />&nbsp;&nbsp;<input type="submit" value="{$lang['user_save']}" class="buttons"></td>
    </tr>
</table>


над ними вставляем:
<table width="100%">
    <tr>
        <td bgcolor="#EFEFEF" height="29" style="padding-left:10px;"><div class="navigation">{$lang['mail_error']}</div></td>
    </tr>
</table>
<div class="unterline"></div>
<table width="100%">
    <tr>
        <td style="padding:2px;">{$lang['mail_error_info']}</td>
    </tr>
    <tr>
        <td style="padding:2px;"><textarea rows="15" style="width:650px;" name="err_text">{$mysql_error}</textarea>
</td>
    </tr>
</table>

в том же файле:
найти:
$new_comments_text = preg_replace($find,$replace, $db->safesql($_POST['new_comments_text']));

ниже вставить:
$err_text = preg_replace($find,$replace, $db->safesql($_POST['err_text']));


в том же файле:
найти:
$db->query("UPDATE " . PREFIX . "_email set template='$new_pm_text' where name='pm'");

ниже вставить:
$db->query("UPDATE " . PREFIX . "_email set template='$err_text' where name='mysql_error'");


Все с этим файлом все, но нам же нужно еще сделать вкл/выкл (если не нужно то дальше не читаем и в изменениях файла mysql.class.php уберите проверку на вкл/выкл)
Открываем файл: engine/inc/options.php
находим там строку:
    showRow($lang['opt_sys_addsec'], $lang['opt_sys_addsecd'], makeDropDown(array("1"=>$lang['opt_sys_yes'],"0"=>$lang['opt_sys_no']), "save_con[sec_addnews]", "{$config['sec_addnews']}"));

ниже вставляем:
    showRow($lang['opt_sys_error'], $lang['opt_sys_senderror'], makeDropDown(array("1"=>$lang['opt_sys_yes'],"0"=>$lang['opt_sys_no']), "save_con[send_error]", "{$config['send_error']}"));

Теперь идем в языковой файл /language/Russian/adminpanel.lng
ниже строки:
'wysiwyg_language'        =>  "ru",

вставить:
// Отправка сообщений об MYSQL ошибки
'opt_sys_error'        =>    "Сообщения об MYSQL ошибках",
'opt_sys_senderror'    =>    "Отправка на e-mail администратора (указаный в настройках скрипта) сообщений об MYSQL ошибках",
'mail_error'        =>    "Настройка E-Mail сообщения, которое отсылается при MYSQL ошибки",
'mail_error_info'    =>    "При написании шаблона для данного сообщения вы можете использовать следующие теги:<br /><b>{%site%}</b> - url этого сайта (указаный в настройкахскрипта)<br /><b>{%date%}</b> - дата ошибки<br /><b>{%sql%}</b> - Запрос вызвавший ошибку<br /><b>{%num-error%}</b> - MYSQL номер ошибки",


собсно все :)

Читайте также: Кирилические url, Ник получателя в рассылке, Просмотры страницы (делаем только уникальные), Делаем красивывми leech ссылки, Не показывать форму голосования тем кто проголосовал

Ключевые теги: веб, сайтостроение, движки, php
 
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Рейтинг:
  • 68
| 1 | 2 | 3 | 4 | 5 |  (голосов: 4)
Комментарии (0)  Распечатать
html-cсылка на публикацию:
BB-cсылка на публикацию:
Прямая ссылка на публикацию:  

Закладки:
Добавить на News2.ru Google slashdot YahooMyWeb Digg Technorati Delicious Забобрить эту страницу! Добавить на Newsland.ru Добавить на СМИ2 Добавить на RUmarkz Добавить на Ваау! Добавить на rucity.com Добавить в закладки МоёМесто.ru Добавить на Habr Добавить на Moi Novosti Добавить страницу к Mister Wong Добавить на Moikrug Добавить на Myscoop Добавить на 100zakladok Добавить на NewsGrad
Информация
 
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.

 
 
© 2009 ИМХО блог
Программирование: Alex
При использваонии материалов указание источника IMHOblog.ORG и гипертекстовая ссылка на http://www.imhoblog.org/ обязательны
Время генерации страницы: 0.02637 секунд
Время компиляции шаблона: 0.00127 секунд
MySQL запросов: 4 (0.00711 секунд)