error_handler mit debug_backtrace() geschlossen 

Status
Für weitere Antworten geschlossen.

corema

Registered +
Registriert
Mai 2008
Beiträge
397
naben ihr lieben,
ich war heute am schreiben und am schreiben, als mir ein fehler in die finger kam. und da ich den verursacher nicht sofort ausfindig machen konnte(was ja wohl häufiger vorkommt soll) dachte ich mir, dass es ganz nett wäre bei der erzeugung von eigenen fehlermeldung (z.b. trigger_error()) nicht nur die die zeile angegeben wird, in der ich trigger_error() aufrufe, sondern auch die zeile, in der die funktion aufgerufen wird, in der trigger_errorr aufgerufen wird.

hat da jemand zufällig ein script "rumliegen"?

gruß corema

EDIT: ich habe da eine viel versprechende funktion gefunden: debug_backtrace()

hat da einer vllt einen error-handler "rumliegen" der mit dieser function arbeitet
 
Zuletzt bearbeitet von einem Moderator:
Hi,
hier habe ich ein Beispiel für dich: https://stuff.frostbitten.de/error.php (bzw. phps)

Wird mit der Klasse alles mit ein error.tpl ausgegeben, in einem error.log gespeichert, unnütze Debug-Punkte entfernt, E_USER_NOTICE als SQL-Fehler behandelt und alles xHTML1.1 (+ valid html-Tabs :) )

Gruß
Broken Sword
 
der sieht doch gar nicht mal so schlecht aus ;)
ich hab hier mal einen geschrieben:

handler:
PHP:
function error_handler($errno , $errstr, $errfile = '', $errline = -1, $errcontext = array() ){
switch($errno){
case E_ERROR:
case E_USER_ERROR:
$msg = '[B]Fatal Error[/B] called';
break;
case E_WARNING:
case E_USER_WARNING:
$msg = '[B]Warning[/B] called';
break; 
case E_NOTICE:
case E_USER_NOTICE:
$msg = '[B]Notice[/B] called';
break;
}
empty($errfile) or $msg.= ' in [I]'.$errfile.'[/I]';
$errline == -1 or $msg.= ' on line [B]'.$errline.'[/B]';
$msg.= ': '.$errstr;
$msg = '
'.$msg.'

';

if (ini_get("display_errors"))
print($msg);
if (ini_get('log_errors'))
error_log(sprintf("PHP %s: %s in %s on line %d", $errors, $errstr, $errfile, $errline));
if($errno == E_ERROR || $errno == E_USER_ERROR) die();
return true;
}
function, die den handler aufruft (zusätzlich zu trigger_error())
PHP:
function create_error($msg, $errno = E_USER_NOTICE, $backtrace = false, $show_args = false){
$debug = debug_backtrace();
$errorcall = $debug[0];
if($backtrace){
unset($debug[0]);
$msg.= '
[LIST]
';

foreach($debug as $step){
if($show_args && count($step['args']) > 0){
foreach($step['args'] as $s){
$s = var_export($s,true); 
}
$args = implode(', ',$step['args']);
}
$msg.= '
[*][B]'.$step['function'].'[/B] ('.$args.') called in [I]'.$step['file'].'[/I] on line [B]'.$step['line'].'[/B]
';
}
$msg.= '
[/LIST]
';
}
else{

}
$context = $GLOBALS;
error_handler($errno, $msg, $errorcall['file'], $errorcall['line'], $context);
}

und die ausgabe:
PHP:
$alter_error_handler = set_error_handler("error_handler");

function a(){
b(aeda);
}
function b(){ c(129,312,'strimng'); }

function c(){
create_error('wunderbarere fehlermeldung mit backtrace', E_USER_ERROR, true, true);
}

a();

trigger_error('fehlermeldung auch über den normalen weg');
?>
wer was dran zu mecker hat: immer raus damit! verbessern kann man sich immer ;)
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Zurück
Oben Unten