Example #1
0
function UserErrorHandler($errno, $errstr, $errfile, $errline)
{
    global $common_errors;
    // Cкрываем путь скрипта от пользователя
    $errfile = basename($errfile);
    // Любую ошибку заносим в массив ошибок
    // Этот массив будет выводится при возникновении E_USER_ERROR
    if (!error_reporting()) {
        // скрытая ошибка ( @команда ) - не выводим
        $common_errors[] = array('ErrNo' => $errno, 'ErrStr' => '@[ ' . $errstr . ' ]', 'ErrFile' => $errfile, 'ErrLine' => $errline);
        // Если error_reporting установить в ноль, то E_USER_ERROR (в случае возникновения)
        // не будет получать управление - делаем дополнительную проверку сами
        if ($errno & E_USER_ERROR) {
            exit;
        }
        return 0;
        // не выводим ошибки в @командах
    } else {
        $common_errors[] = array('ErrNo' => $errno, 'ErrStr' => $errstr, 'ErrFile' => $errfile, 'ErrLine' => $errline);
    }
    switch ($errno) {
        // Все четыре последующие варианта просто выведут маркер ошибки
        // Просто я ещё не придумал чем различить WARNING от NOTICE
        case E_WARNING:
            $errtype = 'E_WARNING';
            $marker = '|W|';
            $color = 'red';
            break;
        case E_NOTICE:
            $errtype = 'E_NOTICE';
            $marker = '|N|';
            $color = 'yellow';
            break;
        case E_USER_WARNING:
            $errtype = 'WARNING';
            $marker = '|w|';
            $color = 'red';
            break;
        case E_USER_NOTICE:
            $errtype = 'NOTICE';
            $marker = '|n|';
            $color = 'yellow';
            break;
        case E_USER_ERROR:
            // Это фатальная ошибка - выполнение скрипта прекратится
            @ob_end_clean();
            // Ничего выводится на броузер не будет, кроме описания ошибки
            print_rt($common_errors);
            exit;
            break;
        default:
            $errtype = 'Unknown code';
            $marker = '||';
            $color = 'yellow';
            $common_errors[] = array('ErrNo' => '', 'ErrStr' => 'Unknown previous error!', 'ErrFile' => '', 'ErrLine' => '');
            break;
    }
    // switch
    // Формат вывода сообщения по умолчанию
    $style = "style=\"color:{$color}; background-color:black\"";
    if (preg_match('/(\\+?)(\\{([^|}]*)[|]?(.*)\\})?(.*[^^]?)(\\^)?/i', $errstr, $matches)) {
        // $1 +, $2 {...}, $3 color $4 bgcolor $5 Сообщение $6 ^ (если нет то не существует)
        // Одна недоработка: нельзя вообще использовать "^", а не только в конце, как задумано
        //print_ra( $matches );
        if ($matches[1] == '+' or defined('ALWAYSFULLSTRING')) {
            $marker = $matches[5];
        }
        if ($matches[3] && $matches[4]) {
            // Заданы оба цвета
            $style = "style=\"color:{$matches['3']}; background-color:{$matches['4']}\"";
        } elseif ($matches[3]) {
            // Задан Color
            $style = "style=\"color:{$matches['3']}\"";
        } elseif ($matches[4]) {
            // Задан BgColor
            $style = "style=\"background-color:{$matches['4']}\"";
        } elseif ($matches[2]) {
            // Если скобочки пустые
            $style = '';
        }
        // то сообщение не будет выделяться
        $errstr = $matches[5];
        if (isset($matches[6]) or defined('ALWAYSBRSTRING')) {
            // Если переменная существует, значит ^ найден
            $marker .= "<br />\n";
        }
    }
    // if
    // Выводим на экран требуемые ошибки и предупреждения
    if (error_reporting() & $errno) {
        echo "<span {$style} title=\"" . htmlspecialchars("[ {$errtype} ]     [ {$errstr} ]     [ {$errfile} ]     [ line: {$errline} ]") . "\">{$marker}</span>\n";
    }
    return 1;
}
Example #2
0
             if (isset($highlight_from[$user])) {
                 $head['from'] = full_name($header->from[0], $highlight_from[$user]);
             } else {
                 $head['from'] = full_name($header->from[0]);
             }
             if (isset($header->subject)) {
                 $head['subject'] = htmlspecialchars(mp_decode($header->subject));
             } else {
                 $head['subject'] = '<i>No subject</i>';
             }
             $head['Size'] = $header->Size;
             $head['no'] = $header->Msgno;
             $r[$k] = $head;
         }
         // for
         print_rt($r);
     }
     // if
     break;
     //////////////////////////////////////////////////
 //////////////////////////////////////////////////
 case 'echo':
     // параметр - номер сообщения
     //////////////////////////////////////////////////
     $header = imap_header($mbi, $params);
     print_ra($header);
     $structure = imap_fetchstructure($mbi, $params);
     print_ra($structure);
     if ($structure->type == 1) {
         // Если MULTI-PART письмо
         $body = imap_fetchbody($mbi, $params, '1');