Вход
 
Главная Форум Каталог веб-мастеров Регистрация SEO библиотека
Разделы сайта
Поиск по сайту
Почта @admin-club.ru
Логин:
Пароль:
· завести почту
Новое
В картинках
см. так же графику
А так же
В продаже ноутбуки. Модель P7310 galaxy tab , вы будете довольны!
 
Делаем лог-файл для ошибок PHP в DLE 9 августа 2011
 - FAQ » PHP
Инструкция как сделать вашу систему DataLife Engine еще более неуязвимой. Делаем заглушку для ошибок в PHP.

1. Создаем папку "engine/logs", если она еще не существует. Создаем файл "engine/logs/php.html". На файл накладываем права записи 777. Этот файл бует логом ошибок PHP.

2. В папке "engine/logs", создаем файл ".htaccess", вот такого содержания:

Order Deny,Allow
Deny from all


* Это для того, что бы Ваш лог никто не увел.

3. Отрываем главную страницу вашего сайта, сохраняем её как файл на диск с названием "hello.html". Загружаем этот файл в папку "templates". Таким образом файл будет доступен по адресу "templates/hello.html".

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

* Этот файл будет заглушкой в случае ошибок.

4. Отройте файл "index.php", найдите

@ini_set ( 'display_errors', true );


и замените на

@ini_set ( 'display_errors', 0 );


В этом же файле, найдите

@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );


ниже на строчку добавьте

//-------------
function errorHandler($type, $message, $file, $line)
{
    static $titles = array(
        E_WARNING           => 'Предупреждение',
        E_NOTICE            => 'Уведомление',
        E_USER_ERROR        => 'Ошибка, определенная пользователем',
        E_USER_WARNING      => 'Предупреждение, определенное пользователем',
        E_USER_NOTICE       => 'Уведомление, определенное пользователем',
        E_STRICT            => 'Проблема совместимости в коде',
        E_RECOVERABLE_ERROR => 'Поправимая ошибка'
    );

    $i = "";

    $i = '<h3>' . $titles[$type] . '</h3>'
        . '<p>' . $message . '<br />'
        . 'Источник: ' . basename($file) . ', line ' . $line . '</p>';

    $backtrace = debug_backtrace();
    array_shift($backtrace);
    $i .= 'Стек вызовов: <ol>';

    foreach ($backtrace as $call) {
        $i .= '<li>';
        if (array_key_exists('file', $call)) {
            $i .= basename($call['file']) . ', line '
                . $call['line'] . ': ';
        }

        if (array_key_exists('object', $call) &&
            method_exists($call['object'], '__toString')) {

            $i .= $call['object'];
        }

        if (array_key_exists('type', $call)) {
            if ($call['type'] == '->') {
                $i .= $call['class'] . '->';
            } elseif ($call['type'] == '::') {
                $i .= $call['class'] . '::';
            }
        }

        $i .=  $call['function'] . '(';

        $strArgs = '';
        foreach ($call['args'] as $arg) {

            if (is_null($arg)) {
                $strArgs .= 'null';

            } elseif (is_bool($arg)) {
                $strArgs .= ($arg) ? 'true' : 'false';

            } elseif (is_string($arg)) {
                $strArgs .= '"' . $arg . '"';

            } elseif (is_integer($arg) || is_float($arg)) {
                $strArgs .= $arg;

            } elseif (is_array($arg)) {
                $strArgs .= 'array (' . sizeof($arg) . ')';

            } elseif (is_object($arg)) {
                $strArgs .= 'object (' . get_class($arg) . ')';

            } elseif (is_resource($arg)) {
                $strArgs .= 'resource (' . get_resource_type($arg) . ')';
            }

            $strArgs .= ', ';
        }
        $strArgs = substr($strArgs, 0, -2);

        $i .=  $strArgs . ')</li>';
    }

    $i .= '</ol>';

    @mail("admin@mail.ru", 'На вашем сайте произошла ошибка в PHP', $i);

    if( ( $f = @fopen(dirname ( __FILE__ )."/engine/logs/php.html","a") ) ){
        if( @fwrite( $f, date( 'Y-m-d H:i:s' ).";\n".$i."\n\n\n\n" ) ){
            @fclose($f);
        }
    }

    $b = "Извините, но произошла ошибка в программе. Работа временно приостановлена.";
    
    print file_exists(dirname ( __FILE__ ).'/templates/hello.html')?file_get_contents(dirname ( __FILE__ ).'/templates/hello.html'):$b;
    die;
}
set_error_handler('errorHandler',  E_ALL ^ E_WARNING ^ E_NOTICE  );

function fatalCatcher(){
    
    $error = error_get_last();
    if ($error['type'] == E_ERROR ||
        $error['type'] == E_CORE_ERROR ||
        $error['type'] == E_COMPILE_ERROR ||
        $error['type'] == E_USER_ERROR) {

        errorHandler(
            $error['type'],
            $error['message'],
            $error['file'],
            $error['line']);
    }
}

register_shutdown_function('fatalCatcher');
//-------------


В этом коде подправьте строку

@mail("admin@mail.ru", 'На вашем сайте произошла ошибка в PHP', $i);


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

Сохраните файл "index.php", не забудьте загрузить файл обратно на сервер.

Это же желательно проделать и для файла "admin.php".

На этом всё.

Читайте так же, как сделать заглушку для БД ошибок в DLE
 - RedRat  - 3208  - 4  - Распечатать
RedRat:
DikiMonah,
у вас скорее всего проблемы с кодировкой.
9 декабря 2011 18:24
DikiMonah:
Все работает, очень полезная статья... Но вот из сообщения на емеил нечего не понятно и что как исправлять тоже не понятно...
Может есть кто то, кто может исправить ошибки?
23 ноября 2011 11:40
Горец:
Интересно было бы проверить на работоспособность, а то поставить поставил, а кто знает рабочий скрипт или нет...
Не буду же я специально в PHP ошибки допускать чтоб проверить...
14 ноября 2011 08:35
KeePeR:
Еще не помешало бы то, как потом исправить эти ошибки!:)
9 августа 2011 18:33
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.
© 2007-2011
«Клуб Админов»

Обратная связь
support@admin-club.ru

Разделы Категории Инфо Публикации
Новости Статьи О сайте Облочко Регистрация
Форум Скрипты Статистика Комментарии Вход
Почта Загрузки Реклама Артикус Пароль
Докс CMS's Правила
СЕО Шаблоны
Дизайн сайта www.artoflogic.ru Rambler's Top100