Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Никита Козин 12.03.2007 19:46 / 12.03.2007 19:48
Я уже публиковал свой обработчик ошибок. Сейчас немного его доделал. Что он умеет:@USE debug.p @auto[] $MAIN:hUEParams[ $.sContactEmail[fant-ik@yandex.ru] $.tExclusionIP[^table::create{addr 193.238.128.53 }] $.sReleaseBody[ <p>The server encountered an unhandled exception and was unable to complete your request.</p> <p>Please contact the server administrator, $env:SERVER_ADMIN and inform them of the time the error occurred, and anything you might have done that may have caused the error.</p> <p>More information about this error may be available in the Parser error log or in debug version of unhandled_exception.</p> ] ] # end @auto[] @UEDebug[hException;tStack][tErrorComment;tClassPathColumn;bIsClass] $tErrorComment[^table::create{type body parser.compile Ошибка компиляции кода. Непарная скобка, и т.п. parser.runtime Методу передано неправильное количество параметров или не тех типов, и т.п. parser.interrupted Загрузка страницы прервалась (пользователь остановил загрузку страницы или истекло время ожидания) number.zerodivision Деление или остаток от деления на ноль number.format Преобразование к числу нечисловых данных file.missing файл отсутствует file.access Нет доступа к файлу image.format Файл изображения имеет неправильный формат (возможно, расширение имени не соответствует содержимому, или файл пуст?) sql.connect Сервер баз данных не может быть найден или временно недоступен sql.execute Ошибка исполнения SQL запроса xml Ошибочный XML код или операция smtp.connect SMTP сервер не может быть найден или временно недоступен smtp.execute Ошибка отправки письма по SMTP протоколу email.format Ошибка в email адресе: адрес пустой или содержит неправильные символы email.send Ошибка запуска почтовой программы http.host Сервер не найден http.connect Сервер найден, но не принимает соединение http.response Сервер найден, соединение принял, но выдал некорректный ответ (нет статуса, заголовка) http.status Cервер выдал ответ со статусом не равным 200 (не успешное выполнение запроса) http.timeout Загрузка документа с HTTP-сервера не завершилась в отведенное для нее время}] $response:content-type[ $.value[text/html] ^if($exception.type eq "xml"){ $.charset[UTF-8] }{ $.charset[$response:charset] } ] <html> <head> <title>Необработанная ошибка!</title> <style type="text/css"> body {background-color: #FFFFFF; color: #000000; font-family: Tahoma, sans-serif; font-size: 0.8em; padding: 35px 50px;} hr {color: #99D228; width: 15; height: 2px; text-align: left;} pre {font-size: x-small;} i {font-family: Arial, sans-serif} a:link, a:visited {font-weight: normal; color: #0000FF; text-decoration: underline;} a:hover, a:visited:hover {color: #99D228; text-decoration: underline;} </style> </head> <body bgcolor="white"> <table border="0"> <tr><td><b>Необработанная ошибка!</b></td></tr> <tr><td bgcolor="#99D228" height="3"></td></tr> </table> ^if($hException.type eq "xml"){ <pre>$hException.comment</pre> }{ <i>^untaint[html]{$hException.comment}</i><br /> } ^if(def $hException.source){ <b>$hException.source</b><br /><br /> файл: ^hException.file.match[(.+/)(.+?)^$][]{$match.1<u>$match.2</u>} <span style="color: #999">(строка: $hException.lineno)</span> } <br /><br /><br /> ^if(def $hException.type){ <table border="0" style="font-size: 1em"> <tr> <td rowspan="2" valign="top">тип ошибки:</td> <td><u>$hException.type</u></td> </tr> <tr> <td width="400" style="color: #999"><i>^tErrorComment.menu{^if($tErrorComment.type eq $hException.type){$tErrorComment.body}}</i></td> </tr> </table> } ^if($tStack){ <hr> ^if(def $MAIN:CLASS_PATH && $MAIN:CLASS_PATH is "table"){ $tClassPathColumn[^MAIN:CLASS_PATH.columns[]] } <i>Остальная цепочка:</i> <ul style="list-style-type: square^; margin: 0.5em 2em^; padding: 0"> ^tStack.menu{ $bIsClass(false) ^if(def $MAIN:CLASS_PATH){ ^if($MAIN:CLASS_PATH is "table"){ ^MAIN:CLASS_PATH.menu{ ^if(!$bIsClass){ $bIsClass(^tStack.file.pos[$MAIN:CLASS_PATH.[$tClassPathColumn.column]] != -1) } } }{ $bIsClass(^tStack.file.pos[$MAIN:CLASS_PATH] != -1) } } <li^if($bIsClass){ style="list-style-type: circle^; color: #999"}> <b>@$tStack.name</b> ^tStack.file.match[(.+/)(.+?)^$][]{<span style="color: ^if($bIsClass){#CCC}{#999}">$match.1</span><u>$match.2</u>} (строка: $tStack.lineno) </li> } </ul> } <br /><br /><br /> <a href="http://${env:SERVER_NAME}$request:uri" target="_blank">http://${env:SERVER_NAME}$request:uri</a> ($env:REMOTE_ADDR^if(def $env:HTTP_X_FORWARDED_FOR){:$env:HTTP_X_FORWARDED_FOR}^if(def $env:HTTP_REFERER){, $env:HTTP_REFERER}) ^if(def $form:fields){ ^try{ ^debug:print[$form:fields] }{ $exception.handled(true) } } </body> </html> # end @UEDebug[] @UERelease[exception;tStack] #@fatalError[sTitle;sSubTitle;sBody] $response:status(500) $response:content-type[ $.value[text/html] $.charset[$response:charset] ] <html> <head><title>Unhandled Exception</title></head> <body> <h1>Unhandled Exception</h1> $MAIN:hUEParams.sReleaseBody ^for[i](0;512/8){<!-- -->} </body> </html> # end @UERelease[] @unhandled_exception[hException;tStack][bLocalIP] ^MAIN:hUEParams.tExclusionIP.menu{ ^if(!def $bLocalIP || !$bLocalIP){ $bLocalIP($env:REMOTE_ADDR eq $MAIN:hUEParams.tExclusionIP.addr || (def $env:HTTP_X_FORWARDED_FOR && $env:HTTP_X_FORWARDED_FOR eq $MAIN:hUEParams.tExclusionIP.addr) ) } } ^if($hException.type eq "file.missing"){ $response:location[http://$env:SERVER_NAME/404/] }{ ^if( ^env:REMOTE_ADDR.left(6) ne '127.0.' && ^env:REMOTE_ADDR.left(8) ne "192.168." && !$bLocalIP ){ ^mail:send[ $.from[robot@^env:SERVER_NAME.match[^^(www\.)?(.+)^$][i]{$match.2}] $.to[$MAIN:hUEParams.sContactEmail] $.subject[${env:SERVER_NAME}: Unhandled Exception] $.html{^UEDebug[$hException;$tStack]} $.charset[$response:charset] $.x-mailer[$env:PARSER_VERSION] ] $result[^UERelease[$hException;$tStack]] }{ $result[^UEDebug[$hException;$tStack]] } } # end @unhandled_exception[]