prowebber.ru - Тут есть все для настоящих вебмастеров

Чтение RSS Мы в твиттере
«    Декабрь 2016    »
ПнВтСрЧтПтСбВс
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 

Всё для вебмастера » Всё для DataLife Engine » DLE хаки » [DLE 9.3] Делаем лог-файл для ошибок БД в DLE

[DLE 9.3] Делаем лог-файл для ошибок БД в DLE


Данный материал предоставлен сайтом ProWebber.ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
У нас вы можете скачать бесплатно [DLE 9.3] Делаем лог-файл для ошибок БД в DLE.


[DLE 9.3] Делаем лог-файл для ошибок БД в DLE

У нашей, всеми любимой, системы, есть один недостаток. Этот недостаток может и не проявлять себя, если ошибок с базой данных происходит мало, ну или ошибки редки.

В данной статья я научу вас, как сделать лог-файл для ошибок базы данных в системе управления сайтом Data Life Engine. Кроме того, информация об ошибке будет отправляться на ваш электронный адрес.

А вместо того, что бы отображать информацию об ошибке БД в системе, сделаем заглушку из статической страницы. Слепок который вы должны сделать самостоятельно (сохранить главную страницу на жесткий диск в виде html файла).

Если учесть, что программа будет еще и отсылать письма, тогда это вообще будет чудом для программиста. К примеру, на моем телефоне настроен электронный ящик, и о любых сообщениях почты я узнаю сразу (орет как бешеный). Это важно, т.к. сайты есть разные, в них по разному инвестируют деньги, и за любые ошибки программисту могут оторвать любые конечности. Сообщения бесплатные, в отличие от смсок.

1. Зайдите на главную страницу своего проекта. Введите в адресной строке адрес несуществующей страницы, сохраните страницу.

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

Файл-заглушка будет так же полезен и сеошникам.

3. Назовите страницу “db.html”, и поместите её в папку “templates”. Адрес сохраненной страницы будет “templates/db.html”.

4. Создайте папку “engine/logs”, с правами 755. В папку поместите файл .htaccess, такого содержания:

Order Deny,Allow
Deny from all

Это прекроет доступ к лог-файлу.

5. Создайте файл “engine/logs/db.txt”, с правами 666.

6. Откройте файл engine/classes/mysqli.class.php для редактирования.

Найдите в нем следующие строки:
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 '
        
        
        
        MySQL Fatal Error
        
        
        
        
        
        
            MySQL Error!
            ------------------------
            
            
            The Error returned was:
            
                '.$error.'

            
            Error Number:
            
                '.$error_num.'
            
                
            
            '.$query_str.'

        
        ';
        
        exit();
    }

и замените эти строки на эти строки:
function display_error($error, $error_num, $query = '')
    {

        if( ( $f = @fopen("engine/logs/db.txt","a") ) ){
            if( @fwrite( $f, date( 'Y-m-d H:i:s' ).";\t#: {$error_num};\tdescription: {$error};\tquery: {$query} endquery;\n" ) ){
                @fclose($f);
            }
        }

        $header="From: \"CMS DLE\" ";
        $header.="Content-type: text/plain; charset=\"windows-1251\"";

        @mail("admin@mail.ru", "DB error on SiteInfo with ".DBNAME.", time ".date( 'Y-m-d H:i:s' ), "Error number: {$error_num}\nDescription: {$error}\nQuery: {$query}\n\n\n-----------------"."\nDB user: ".DBUSER."\nDB pass:".DBPASS."\nDB name: ".DBNAME."\nDB host:".DBHOST."\n\n\nDate and time: ".date( 'Y-m-d H:i:s' )."\n-----------------\n\n\nSERVER print_r: ". print_r($_SERVER, true), $header);

        $file_ = "templates/db.html";

        if(file_exists( $file_ )){
            @readfile( $file_ );
        }else{
            echo "DB error. E-mail administrator admin@mail.ru. Please wait 10 minutes and try again.";
        }

        exit();
    }

7. Сохраните файл и откройте подобный файл engine\classes\mysql.class.php для редактирования. Замените те же самые строки, что указано выше.

* Данные файлы дублируют программный код, они сделаны для разных версий MySQL.

8. Замените адреса электронной почты в новом вставляемом коде.

Найти во вставляем коде и заменить в соответсвии:

email@site.ru – почта, якобы от которой отправлено письмо, 1 раз заменить на почту вашего сайта,
admin@mail.ru – ваша почта, заменить два раза на свою почту.

Теперь поясню код.

if( ( $f = @fopen("engine/logs/db.txt","a") ) ){
            if( @fwrite( $f, date( 'Y-m-d H:i:s' ).";\t#: {$error_num};\tdescription: {$error};\tquery: {$query} endquery;\n" ) ){
                @fclose($f);
            }
        }

- это запись информации в лог-файл (номер ошибки, описание, запрос).

$header="From: \"CMS DLE\" ";
        $header.="Content-type: text/plain; charset=\"windows-1251\"";

        @mail("admin@mail.ru", "DB error on SiteInfo with ".DBNAME.", time ".date( 'Y-m-d H:i:s' ), "Error number: {$error_num}\nDescription: {$error}\nQuery: {$query}\n\n\n-----------------"."\nDB user: ".DBUSER."\nDB pass:".DBPASS."\nDB name: ".DBNAME."\nDB host:".DBHOST."\n\n\nDate and time: ".date( 'Y-m-d H:i:s' )."\n-----------------\n\n\nSERVER print_r: ". print_r($_SERVER, true), $header);

- отправка письма, в кодировке с поддержкой кириллицы (в теме вставляется название базы данных и время с датой, в самом сообщении номер ошибки, описание, запрос, данные для соединения с базой данных, время и дата, а так же подробная информация о запросе страницы).

$file_ = "templates/db.html";

        if(file_exists( $file_ )){
            @readfile( $file_ );
        }else{
            echo "DB error. E-mail administrator admin@mail.ru. Please wait 10 minutes and try again.";
        }

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

Каждый из отдельных блоков можно удалять, например если вам вовсе не нужны сообщения на емайл, удалите код, который отправляет письма. Если вам не нужен лог-файл вовсе – удалите код который производит запись в лог файл. Можно удалить и то и это, тогда просто выведется страница заглушка и не будет отображена информация об ошибке БД.

Внимание! В сообщении на почту отправляются данные для соединения с БД, если вам такая роскошь не нужна (а это еще и к тому же опасно, если ваш ящик взломают) то удалите ниже приведенный код из вставляемого кода в классы БД (вы делали это выше).

"."\nDB user: ".DBUSER."\nDB pass:".DBPASS."\nDB name: ".DBNAME."\nDB host:".DBHOST."

Пожалуй это всё. Сообразительные могут продолжить идею, к примеру, вставлять шаблон главной страницы (заменив теги системы) вместо файла заглушки.

Автор: RedRat (admin-club.ru)
Версия DLE: 9.x

Внимание! У вас нет прав для просмотра скрытого текста.


0
Просмотры: 3315 VIP ProWebber | Комментарии (2)
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

#1Molen

  • 30 июля 2011 19:38
  • Регистрация: 22.07.2011
  • ICQ: --
  • Комментариев: 53
Кхм, а простите, зачем? Чем не устраивают стандартные возможности сервера и не менее стандартный файл логов?

0

#24ogo

  • 2 августа 2011 19:07
  • Регистрация: 10.01.2010
  • ICQ: 450211235
  • Комментариев: 51
котэ, где же вы раньше были, я уж за етих ошибок к дле интерес потерял
magnify

0
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.

Max-energy.top - Заработок на электросчетчиках;)

Skripters.info - все для вебмастера. Только эксклюзивный контент.

Создание шаблонов DLE, быстро и недорого! 3wave.com.ua

Бро лей на лучшую партнёрку

Почти бесплатный VDS хостинг!

Поддержи сайт
Скрипты, cms, шаблоны, статьи по раскрутке

Опросы

Как часто вы бываете на сайте?

Захожу 1-2 раза в день
1-2 часа в сутки
Более 2 часов
Почти целый день тут smile

Архив новостей
Ноябрь 2016 (7)
Октябрь 2016 (10)
Сентябрь 2016 (8)
Август 2016 (11)
Июль 2016 (14)
Июнь 2016 (17)

Последние комментарии:

Искать людей

Ваши переписки