parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Unhandled Exception. Подробно и электронной почтой, пожалуйста. (UE.p)

Никита Козин 12.03.2007 19:46 / 12.03.2007 19:48

Я уже публиковал свой обработчик ошибок. Сейчас немного его доделал. Что он умеет:

1. Подробно выводить информацию об ошибке, если ошибка произошла на локальной машине (IP-адреса «127.0.xxx.xxx» и «192.168.xxx.xxx») или же с IP-адреса, содержащегося в таблице tExclusionIP.

2. Отправлять подробное сообщение об ошибке на адреса электронной почты, указанные в переменной sContactEmail (разделенные запятыми). При этом пользователю подробная информация не выводится, а выводится текст из переменной sReleaseBody.

Подробная информация включает в себя:

1. URL страницы,

2. referer, откуда пришли,

3. IP-адрес (и forwarded тоже),

4. Если в списке файлов есть классы (файлы, расположенные в $MAIN:CLASS_PATH), то они выводятся бледнее,

5. Если подключен класс debug, то выводятся все данные формы.

Использование: достаточно подключить файл в корневом auto.p (предварительно изменив sContactEmail и $tExclusionIP!)
@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[]


  • Unhandled Exception. Подробно и электронной почтой, пожалуйста. (UE.p), Никита Козин [M] 12.03.2007 19:46 / 12.03.2007 19:48