Autor Zpráva
andy
Profil *
Ahoj potřeboval bych poradit... snažím se o bezpečnou aplikaci (i pro php4).
V aplikaci nastavím error_reporting(0); ale kdyby se tam náhodou vytvořila nějaká chyba, potřeboval bych ji zpracovat:
- zapsat do logu
- pokud ta chyba bude fatalní, tak přesměrovat na chybovku 500
- případně informovat admina
Jak toto mám řešit? V kódu mám (teda budu mít) trigger_error, které mi zpracuje funkce set_error_handler, ale nevím jak zpracovat mnou neošetřené chyby, které nastanou přiběhu...?
Děkuji za odpovědi
andy
Profil *
popřípadě prosím o radu, jak řešit chyby ve větších aplikacích a jak je řešíte vy ;)
avaranger
Profil
Nevim. Ale chci to sledovat pres mail, tak sem musel poslat tenhle prispevek bez obsahu... :P
andy
Profil *
to jste se jeste nikdo nezamysleli nad resenim chyb v php?
avaranger
Profil
Ja chyby resim zapisem do logu a dal se o ne nestaram ;)
avaranger
Profil
Jedine co jsem nasel:


<?php function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) {
// timestamp for the error entry
$dt = date("Y-m-d H:i:s (T)");
$err="";
// define an assoc array of error string
// in reality the only entries we should
// consider are 2,8,256,512 and 1024
$errortype = array (
1 => "Error",
2 => "Warning",
4 => "Parsing Error",
8 => "Notice",
16 => "Core Error",
32 => "Core Warning",
64 => "Compile Error",
128 => "Compile Warning",
256 => "User Error",
512 => "User Warning",
1024=> "User Notice"
);
// set of errors for which a var trace will be saved
$user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);

$err .= "\t<i>".$dt."</i>\n";
$err .= "\t<b>".$errmsg."</b>\n";
$err .= "\tV soubotu: <i>".$filename."</i>\n";
$err .= "\tChyba na řádku <b>".$linenum."</b><hr>\n";
//$err .= "";

/* if (in_array($errno, $user_errors))
$err .= "\t<vartrace>".wddx_serialize_value($vars,"Variables")."</vartrace>\n" ;*/
//$err .= "</errorentry>\n\n";

// for testing
// echo $err;

// save to the error log, and e-mail me if there is a critical user error
//error_log($err, 3, "logs/error.log");
//if ($errno == E_USER_ERROR)
// mail("phpdev@example.com","Critical User Error",$err);
echo nl2br($err);
}

$old_error_handler = set_error_handler("userErrorHandler");


?>
avaranger
Profil
a jeste:

http://delo.dcs.fmph.uniba.sk/PHP-cz/features.error-handling.html
Pachollini
Profil
Používám něco podobného, jako je na http://www.cesky-hosting.cz/napoveda-detail-php-skripty.html#zobrazeni -chybovych-zprav
jenom si ty chyby házím go logu.
andy
Profil *
[i]Jedine co jsem nasel:


<?php function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) {
// timestamp for the error entry
$dt = date("Y-m-d H:i:s (T)");
$err="";
// define an assoc array of error string
// in reality the only entries we should
// consider are 2,8,256,512 and 1024
$errortype = array (
1 => "Error",
......

je ale problem v tom, ze ja jsem si tam dal neco podobneho.. ale funguju mi to jen kdyz tam poslu nejakou trigger error ale kdyz udelam nejakou chybu v kodu tak mi ji tam neposle... tak sem myslel ze je to jen pro vlastni chyby...? nebo nemam pravdu?
-error414
Profil *
andy
No ono asi nepude zachytavat parser chyby jinam nez do logu vubec uz to nepujde zachytavat pomoci PHP.
Protoze kdyz vytvoris v PHP parse error tak se kod ani nevykona.
Retal
Profil
Používám error handler (viz Pacholliniho odkaz) (error reporting na max), chyby ukládám do logu a pomocí CRONu si je nechávám posílat v pravidelných intervalech na e-mail.
Toto téma je uzamčeno. Odpověď nelze zaslat.