error handling ?!?!
2 отговора
98 прегледа
error handling ?!?!
Как се справяте с error handling-а?
Изрових едни функциики дето може и да ви свършат работа.
Това се ползва така:
Изрових едни функциики дето може и да ви свършат работа.
<?php
//err.php
function getError($type, $msg, $file, $line, $context){
$errortypes = array(E_ERROR=>"E_ERROR",
E_WARNING=>"E_WARNING",
E_NOTICE=>"E_NOTICE",
E_USER_ERROR=>"E_USER_ERROR",
E_USER_WARNING=>"E_USER_WARNING",
E_USER_NOTICE=>"E_USER_NOTICE" );
$error = "<p><table border='0' cellspacing='2' cellpadding='2' width='90%' align='center'>";
$error .= "<tr bgcolor=#C0C0C0><td><b>Error type:</b></td><td>{$errortypes[$type]}</td></tr>\n";
$error .= "<tr bgcolor=#C0C0C0><td><b>Message:</b></td><td>$msg</td></tr>\n";
$error .= "<tr bgcolor=#C0C0C0><td><b>Location:</b></td><td>$file (line: $line)</tr>\n";
$error .= "</table></p>";
// TABLE 2: Source code s promenlivite
$error .= "<p><table border='0' cellspacing='2' cellpadding='2' width='90%' align='center'>";
$error .= "<tr bgcolor='#eeeeee'><td><pre>\n";
$code = file_get_contents($file,TRUE); // zemame source code
$lcode = preg_split("#\\n#i",$code); // cepime go na lines
$htmlcode = ""; // tuka darzime HTML versijata na koda
for($i=($line-15);$i<=($line+15);$i++){ // pokazva 15 linii predi i sled greshkata
if(($i+1)==$line){
$htmlcode .= "<table border=0 bgcolor='#FF8080' cellspacing=0 cellpadding=0 width='100%'>";
$htmlcode .= "<tr><td><pre>";
} // dobavja 4erven cvet na linijata s greshkata
$htmlcode .= "<b>".($i+1)."</b> " . @rtrim($lcode[$i]);
if(($i+1)==$line){
$htmlcode .= "</pre></td></tr></table>";
}
$htmlcode .= "<br />";
}
AddToolTips($context, $htmlcode);
$error .= $htmlcode . "</pre></td></table></p>";
return $error;
}
function AddToolTips($context, &$ccode){
foreach($context as $varname=>$value){
if(is_array($value) || is_object($value)){
AddToolTips($value, $ccode);
$value = print_r($value,TRUE);
}
$value = str_replace("'","'",htmlspecialchars(strval($value)));
$color = strtoupper("#" . dechex(rand(17,hexdec("BB"))) . dechex(rand(17,hexdec("BB"))) .
dechex(rand(17,hexdec("BB"))));
$ccode = preg_replace("/\\$$varname([^a-zA-Z0-9_])/",
"<b><font color='$color'><acronym title='$value'>\$$varname</acronym></font></b>$1",$ccode);
$ccode = str_replace("['$varname']",
"<b><font color='$color'><acronym title='$value'>['$varname']</acronym></font></b>",$ccode);
}
}
?>
Това се ползва така:
<?
include_once("err.php");
function CustomError($type, $msg, $file, $line, $context){
@ob_end_clean(); // tuka se vzima rid-a na napolovina parsnata starnica
echo getError($type, $msg, $file, $line, $context);
die();
}
set_error_handler("CustomError");
//PEAR::setErrorHandling(PEAR_ERROR_TRIGGER, E_USER_WARNING); //ako izpolzvash PEAR
/*
* ot tuka nadolu te4e vashija kod
*
**/
?>
Re: error handling ?!?!
Разгледай по-подробно exception management application block за .net като архитектура (справка msdn). Накратко - концепцията е да прихванеш и публикуваш грешка, и да имаш слушатели за тази грешка. Всеки един слушател може да свърши различна работа с тая си грешка, като например да прекрати работата на скрипта, да изпрати мейл на нещастния човечец, дето е правил сайта, да запише в база данни, да драсне някой ред в log-а... Което е хубаво, можеш да плъгваш и да ънплъгваш слушатели, с което да управляваш поведението на скрипта в зависимост от това дали разработваш в момента, или си в production environment...
ПП. Ако използваш това, което си постнал, поне оправи html-а. Прави три вложени таблици и пет font тага, за да покаже една грешка, пфууу...
ПП. Ако използваш това, което си постнал, поне оправи html-а. Прави три вложени таблици и пет font тага, за да покаже една грешка, пфууу...
Re: error handling ?!?!
Аз съм обикновено на становището на царя "Когато му дойде времето". Правя прости обработки на грешки и ако ми затрябва турбо адвансд логване и пращане на пощи се замислям как да си го направя.
В подхода ти не ми харесва само, че си омешал грешката с хтмл-то. Така няма да можеш лесно да добавиш или махнеш сложно логване ако ти потрябва.
И да, пхп5 може да е недодялано подобие на Джава, но поне има нормална обработка на изключенията. Сигурно има печалба в това да се знаят
.
--
Екстремно програмиране на български.
[линк]
В подхода ти не ми харесва само, че си омешал грешката с хтмл-то. Така няма да можеш лесно да добавиш или махнеш сложно логване ако ти потрябва.
И да, пхп5 може да е недодялано подобие на Джава, но поне има нормална обработка на изключенията. Сигурно има печалба в това да се знаят
--
Екстремно програмиране на български.
[линк]