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; }
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');