Errorhandling
am 23.06.2006 12:32:42 von Matthias Coy
Hi,
Ich hab folgendes definiert:
------------------------------code-------------------------- ----
error_reporting(0);
$old_error_handler = set_error_handler("userErrorHandler");
------------------------------/code------------------------- -----
und
------------------------------code-------------------------- ----
function userErrorHandler ($errno, $errmsg, $filename, $linenum,
$vars) {
$time=date("d M Y H:i:s");
// Get the error type from the error number
$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",
2047 => "All Errors",
2048 => "Run-time Notice");
$errlevel=$errortype[$errno];
if($errno != 2 && $errno != 8) {
//Terminate script if fatal errror
die("A fatal error has occured");
} else {
die("TEST");
}
}
------------------------------/code------------------------- -----
Wenn ich jetzt das error_reporting(0) auskommentiere, dann wirft mir der
Parser folgende Fehlermeldung:
Parse error: parse error, unexpected T_RETURN in
/home/matze/htdocs/test.klasse.php on line 72
Die Fehlermeldung ist mir klar, die könnte ich beheben. Was mich jetzt
nur wundert ist: Wenn ich das error_reporting(0) wieder
'einkommentiere', dann wird weder ein "A fatal error has occured" noch
"TEST" ausgegeben ... wieso?
Gruß
Matze
P.S: Ich hatte plötzlich eine weiße Seite und hab mich gefragt wieso,
hab dann das error_reporting wieder PHP selbst überlassen und siehe da
ich krieg die "Parse error"-Meldung.
Re: Errorhandling
am 23.06.2006 12:36:57 von Frank Schenk
Matthias Coy wrote:
> Hi,
>
> Ich hab folgendes definiert:
>
> ------------------------------code-------------------------- ----
> error_reporting(0);
> $old_error_handler = set_error_handler("userErrorHandler");
> ------------------------------/code------------------------- -----
error_reporting -- Sets which PHP errors are reported
Description
int error_reporting ( [int level] )
http://de3.php.net/manual/en/function.error-reporting.php
Example 1. error_reporting() examples
// Turn off all error reporting
error_reporting(0);
Der freundliche Handbuchvorlesedienst
Re: Errorhandling
am 23.06.2006 12:55:24 von Matthias Coy
Frank Schenk schrieb:
> Matthias Coy wrote:
>> Hi,
>>
>> Ich hab folgendes definiert:
>>
>> ------------------------------code-------------------------- ----
>> error_reporting(0);
>> $old_error_handler = set_error_handler("userErrorHandler");
>> ------------------------------/code------------------------- -----
>
> error_reporting -- Sets which PHP errors are reported
>
> Description
> int error_reporting ( [int level] )
>
> http://de3.php.net/manual/en/function.error-reporting.php
>
> Example 1. error_reporting() examples
>
> // Turn off all error reporting
> error_reporting(0);
>
>
> Der freundliche Handbuchvorlesedienst
Ja danke, das ist schon klar. Ich hab das so verstanden:
error_reporting(0)
--> damit der Parser keine Fehler schmeisst, sondern ich das selber
mache mit:
$old_error_handler = set_error_handler("userErrorHandler");
Wenn ich das error_reporting wieder höher setze, dann werden ja wieder
die Fehler von PHP geschmissen und nicht von mir.
Gruß
Matze
Re: Errorhandling
am 23.06.2006 12:57:52 von Frank Schenk
Matthias Coy wrote:
> error_reporting(0)
> --> damit der Parser keine Fehler schmeisst, sondern ich das selber
> mache mit:
Nein, du hast es nicht verstanden. PHP schmeisst IMMER die Fehler.
Allerdings kann man sich bei der Fehlerbehandlung einklinken
(set_error_handler()).
gruß, Frank
Re: Errorhandling
am 23.06.2006 13:31:46 von Matthias Coy
Frank Schenk schrieb:
> Matthias Coy wrote:
>> error_reporting(0)
>> --> damit der Parser keine Fehler schmeisst, sondern ich das selber
>> mache mit:
>
> Nein, du hast es nicht verstanden. PHP schmeisst IMMER die Fehler.
> Allerdings kann man sich bei der Fehlerbehandlung einklinken
> (set_error_handler()).
>
>
> gruß, Frank
Schwierig. Zitat aus:
http://de2.php.net/manual/de/function.set-error-handler.php
[...]Es ist wichtig und darf nicht vergessen werden, dass die
standardmässige PHP Fehlerbehandlung vollkommen umgangen wurde. Die
Einstellungen der Funktion error_reporting() haben keine Auswirkung und
Ihre eigene Fehlerbehandlungsroutine wird ohne Rücksicht darauf
aufgerufen.[...]
Steht im vorletzten Absatz. Daraus schliesse ich das es vollkommen egal
ist was ich mit error_reporting() anstelle, wenn ich ein
set_error_handler() setze.
Bei meinem Problem greift vermutlich die Anmerkung das meine
benutzerdefinierte Fehlerbehandlung noch nicht geladen ist wenn der
genannte Parse Error geworfen wird. Kommt also die nächste Frage auf:
Kann man solche Fehler irgendwie abfangen und sagen das dies wieder die
PHP-Fehlerbehandlung übernehmen soll?
Gruß
Matze
Re: Errorhandling
am 23.06.2006 13:43:39 von Frank Schenk
Matthias Coy wrote:
> Bei meinem Problem greift vermutlich die Anmerkung das meine
> benutzerdefinierte Fehlerbehandlung noch nicht geladen ist wenn der
> genannte Parse Error geworfen wird. Kommt also die nächste Frage auf:
> Kann man solche Fehler irgendwie abfangen und sagen das dies wieder die
> PHP-Fehlerbehandlung übernehmen soll?
http://de2.php.net/manual/en/function.set-error-handler.php
The following error types cannot be handled with a user defined
function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING,
E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the
file where set_error_handler() is called.
Diese Fehler könen nicht vom eigenen Errorhandler behandelt werden aber
da du error_reporting auf 0 gesetzt hast zeigt PHP die Fehlermeldung
natürlich nicht an.
gruß, Frank
Re: Errorhandling
am 23.06.2006 14:12:16 von Matthias Coy
Frank Schenk schrieb:
> Matthias Coy wrote:
>> Bei meinem Problem greift vermutlich die Anmerkung das meine
>> benutzerdefinierte Fehlerbehandlung noch nicht geladen ist wenn der
>> genannte Parse Error geworfen wird. Kommt also die nächste Frage auf:
>> Kann man solche Fehler irgendwie abfangen und sagen das dies wieder
>> die PHP-Fehlerbehandlung übernehmen soll?
>
> http://de2.php.net/manual/en/function.set-error-handler.php
>
> The following error types cannot be handled with a user defined
> function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING,
> E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the
> file where set_error_handler() is called.
>
> Diese Fehler könen nicht vom eigenen Errorhandler behandelt werden aber
> da du error_reporting auf 0 gesetzt hast zeigt PHP die Fehlermeldung
> natürlich nicht an.
>
> gruß, Frank
Hab ich glatt überlesen. Vielen Dank für die Belehrung, jetzt ists mir
klar :)
Gruß und schönes Wochenende
Matze
Re: Errorhandling
am 23.06.2006 14:17:06 von Frank Schenk
Matthias Coy wrote:
>> The following error types cannot be handled with a user defined
>> function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING,
>> E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the
>> file where set_error_handler() is called.
>>
>> Diese Fehler könen nicht vom eigenen Errorhandler behandelt werden
>> aber da du error_reporting auf 0 gesetzt hast zeigt PHP die
>> Fehlermeldung natürlich nicht an.
>>
>> gruß, Frank
>
> Hab ich glatt überlesen. Vielen Dank für die Belehrung, jetzt ists mir
> klar :)
Wenns ne Belehrung wär würd ich dir jetzt die Rechnung schicken,
Handbuchvorlesedienst ist aber gratis :-)
Dir auch ein schönes Wochenende,
gruß, Frank