lixx: Meldungen aus set_error_handler()

Hi!

Ich habe einen errorHandler erstellt...

function errorHandler($errno, $errmsg, $filename, $linenum) {

// timestamp for the error entry
 $date = date('Y-m-d H:i:s (T)');

// define an assoc array of error string
 $errortype = Array(
  E_ERROR    => 'Error',
  E_WARNING   => 'Warning',
  E_PARSE    => 'Parsing Error',
  E_NOTICE   => 'Notice',
  E_CORE_ERROR  => 'Core Error',
  E_CORE_WARNING  => 'Core Warning',
  E_COMPILE_ERROR  => 'Compile Error',
  E_COMPILE_WARNING => 'Compile Warning',
  E_USER_ERROR  => 'User Error',
  E_USER_WARNING  => 'User Warning',
  E_USER_NOTICE  => 'User Notice',
//  E_STRICT   => 'Runtime Notice',  // Use at PHP 5
//  E_RECOVERABLE_ERRROR=> 'Catchable Fatal Error' // Use at PHP 5
 );

$err  = $date."\t";
 $err .= $_SERVER['REMOTE_ADDR']."\t";
 $err .= $errno."\t";
 $err .= $errortype[$errno]."\t";
 $err .= $errmsg."\t";
 $err .= $filename."\t";
 $err .= $linenum."\n";

// save to the error log
 error_log($err, 3, 'errors.log');

trigger_error($errmsg);
}

set_error_handler('errorHandler');

und zum Testen eine nicht definierte Konstante ausgeben lassen ...

echo SDF;

Soweit so gut, funktioniert auch alles ganz schön. Nur wenn ich einen error handler setze, wird mir zwar ein Eintrag ins log gemacht, aber nicht mehr am Bildschirm angezeigt. Dafür verwende ich jetzt trigger_error(). Aber der gibt mir nicht das gleiche aus, wie wenn kein error handler gesetzt wird.

Dann kommt noch hinzu (vielleicht ist das wichtig), dass der error handler sich in einer datei befindet, die inkludiert wird, danach wird eine Klasse als datei inkludiert und erzeugt. Und in dieser Datei befindet sich dann der Fehler.

Normale Fehlerausgabe (ohne error handler):
Notice: Use of undefined constant SDF - assumed 'SDF' in /path/to/class.file.inc on line 19

eingehende parameter:
8
Use of undefined constant SDF - assumed 'SDF'
/path/to/class.file.inc
19

meldung aus trigger_error($errmsg.'<br>'.$filename.'--END--');
Use of undefined constant SDF - assumed 'SDF'
/path/to/class.file.inc--END-- in /path/to/errorh.inc on line 53

Jetzt die Frage: woher kommt das Anhängsel "in /path/to/errorh.inc on line 53" nach dem "--END--"? Kann man das verhindern?

lg lixx

  1. echo $begrüßung;

    Soweit so gut, funktioniert auch alles ganz schön. Nur wenn ich einen error handler setze, wird mir zwar ein Eintrag ins log gemacht, aber nicht mehr am Bildschirm angezeigt. Dafür verwende ich jetzt trigger_error(). Aber der gibt mir nicht das gleiche aus, wie wenn kein error handler gesetzt wird.

    trigger_error() wirkt so, als ob an dieser Stelle ein Fehler aufgetreten wäre. Die dazugehörige Datei, Zeilennummer etc. ist die in der die trigger_error()-Funktion aufgerufen wird.

    meldung aus trigger_error($errmsg.'<br>'.$filename.'--END--');
    Use of undefined constant SDF - assumed 'SDF'
    /path/to/class.file.inc--END-- in /path/to/errorh.inc on line 53

    Jetzt die Frage: woher kommt das Anhängsel "in /path/to/errorh.inc on line 53" nach dem "--END--"?

    Das ist die übliche Vorgehensweise PHPs bei Fehlern. Es wird Datei und Zeilennummer des Auftretens angezeigt. In dem Fall die von trigger_error().

    Kann man das verhindern?

    Du hast doch alle Daten des ursprünglichen Fehlers vorliegen. Wieso gibst du sie nicht einfach mit echo und Konsorten aus?

    echo "$verabschiedung $name";

    1. Du hast doch alle Daten des ursprünglichen Fehlers vorliegen. Wieso gibst du sie nicht einfach mit echo und Konsorten aus?

      Jo! Das ist doch ein Vorschlag! So funzt es!
      Aber auf die einfachsten Dinge muß man erst mal kommen ;)

      danke & lg lixx

  2. n'abend,

    Jetzt die Frage: woher kommt das Anhängsel "in /path/to/errorh.inc on line 53" nach dem "--END--"? Kann man das verhindern?

    in der PHP Dokumentation ist es oft sinnvoll und hilfreich, wenn man sich mal kurz durch die User Contributed Notes kämpft. Da findet man dann Aussagen wie: "It will print out the page, and the line number that the trigger_error() function is called on." Auf die Schnelle hab ich jedoch nichts gefunden, um die Angabe von Datei und Zeile zu unterdrücken.

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|