error handling, undefined function
seth
- php
gudn tach!
wie kann ich in php fehlerbehandlung von nicht existenten funktionen realisieren?
so geht es schon mal nicht:
-------- begin php-code --------
function user_error_handler($errno, $errmsg, $filename, $linenum, $vars){
error_log('kaputt', 3, 'error.log');
}
set_error_handler('user_error_handler');
gibts_nicht();
-------- end of php-code --------
bei display_error==1 wird mir zwar die meldung
'PHP Fatal error: Call to undefined function gibts_nicht() in foo.php on line 42'
auf dem bildschirm ausgegeben, aber in die datei error.log wird nichts reingeschrieben.
prost
seth
echo $begrüßung;
wie kann ich in php fehlerbehandlung von nicht existenten funktionen realisieren?
'PHP Fatal error: Call to undefined function gibts_nicht() in foo.php on line 42'
Bei fatalen Fehlern wird das Script angehalten. Diese kannst du nicht abfangen. Ein fataler Fehler ist es beispielsweise auch, wenn kein Speicher mehr angefordert werden kann. Wenn der Speicher alle ist, dann ist auch keiner mehr für deine Fehlerbehandlungsroutine da.
Dass nicht vorhandene Funktionen auch fatale Fehler auslösen wird sicher seine berechtigten Gründe haben...
Nicht vorhandene Funktionen sollten beim Testen des Scripts bereits auffallen. Wenn die Funktionsnamen erst zur Laufzeit ermittelt werden, empfiehlt es sich die Existenz der Funktion vor deren Aufruf zu überprüfen (function_exists()).
echo "$verabschiedung $name";
echo 'gudn tach '.$name."\n";
Bei fatalen Fehlern wird das Script angehalten. Diese kannst du nicht abfangen. [...]
Dass nicht vorhandene Funktionen auch fatale Fehler auslösen wird sicher seine berechtigten Gründe haben...
ich ahnte es. schade.
Nicht vorhandene Funktionen sollten beim Testen des Scripts bereits auffallen.
ja, selbstverstaendlich.
*zaehne_knirsch*
es kann jedoch bei einem kleinen update aus schierer doofheit mal vorkommen, dass man vergisst, eine datei mit einer winzig kleinen funktion, welche vorher in einer anderen datei untergebracht war und dort jahrelang funktionierte, hochzuladen. wenn man dann aufs testen dieser einen kleinen winzigen funktion verzichtet, bekommt man den fehler erst mit, wenn einem ein freundlicher user davon berichtet. ;-)
prost
seth
Hallo seth.
es kann jedoch bei einem kleinen update aus schierer doofheit mal vorkommen, dass man vergisst, eine datei mit einer winzig kleinen funktion, welche vorher in einer anderen datei untergebracht war und dort jahrelang funktionierte, hochzuladen. wenn man dann aufs testen dieser einen kleinen winzigen funktion verzichtet, bekommt man den fehler erst mit, wenn einem ein freundlicher user davon berichtet. ;-)
Wenn diese Datei mit require
eingebunden wurde und der Webmaster bemerkt es nicht, dann ist sowieso alles egal.
Einen schönen Mittwoch noch.
Gruß, Ashura
gudn tach Ashura!
Wenn diese Datei mit
require
eingebunden wurde und der Webmaster bemerkt es nicht, dann ist sowieso alles egal.
oh, stimmt, da war ja was. (im besagten fall wurde include()
verwendet.)
"include() produces a Warning while require() results in a Fatal Error." (quelle)
ich haette also bloss die fehlerbehandlungsdatei _vor_ der nicht existenten datei (mit der nicht existenten funktion) laden muessen... (oops)
prost
seth
echo $begrüßung;
ich haette also bloss die fehlerbehandlungsdatei _vor_ der nicht existenten datei (mit der nicht existenten funktion) laden muessen... (oops)
Ich denke nicht, dass das schon alles ist. Wenn das Fehlerlogging zwar das misslungene include registriert, aber das Programm nicht darauf reagiert, dann wird es trotz besagtem Fehlerlogging die nicht vorhandene Funktion aufrufen wollen.
Mit anderen Worten: Fehlerlogging ist _ein_ Hilfsmittel, aber auch nicht mehr. Es ersetzt keine programmseitigen Prüfungen.
echo "$verabschiedung $name";
echo 'gudn tach '.$name."\n";
ich haette also bloss die fehlerbehandlungsdatei _vor_ der nicht existenten datei (mit der nicht existenten funktion) laden muessen... (oops)
Ich denke nicht, dass das schon alles ist. Wenn das Fehlerlogging zwar das misslungene include registriert, aber das Programm nicht darauf reagiert, dann wird es trotz besagtem Fehlerlogging die nicht vorhandene Funktion aufrufen wollen.
dass logging nur logging und noch nicht debugging ist, ist klar.
debugging wird aus logging erst, wenn man die reaktion des programmierers dazunimmt. ;-)
ein gescheites logging haette es mir erspart, die fehlende funktion/datei zwei wochen lang nicht zu bemerken.
prost
seth
hi,
wenn man dann aufs testen dieser einen kleinen winzigen funktion verzichtet, bekommt man den fehler erst mit, wenn einem ein freundlicher user davon berichtet. ;-)
den user gehen in einem produktiven system PHP-eigene fehlermeldungen eigentlich eh nichts an.
da würde ich lieber ein error_log definieren, wo du dann selbst ab und zu mal reinschaust, ob und wann und welche fehler aufgetreten sind.
gruß,
wahsaga
gudn tach wahsaga!
den user gehen in einem produktiven system PHP-eigene fehlermeldungen eigentlich eh nichts an.
ack
da würde ich lieber ein error_log definieren, wo du dann selbst ab und zu mal reinschaust, ob und wann und welche fehler aufgetreten sind.
klar, so mach ich das ja auch _mittlerweile_. allerdings hoffte ich, dass es zudem die moeglichkeit in php gibt, sich auch bei jeglichen fatal errors eine e-mail schicken zu lassen, in der dann z.b. steht, dass eine funktion nicht gefunden wurde.
prost
seth
Hallo dedlfix,
Seths Fehlermeldung kommt mir sehr bekannt vor. Es wäre mir sehr lieb, wenn Dieser Fehler schnell behoben wird, weil mir mein Landbier-Vorrat ausgeht. *g*
Nicht vorhandene Funktionen sollten beim Testen des Scripts bereits auffallen. Wenn die Funktionsnamen erst zur Laufzeit ermittelt werden, empfiehlt es sich die Existenz der Funktion vor deren Aufruf zu überprüfen (function_exists()).
die hätte ich auch empfohlen. Aber wie überprüfe ich das Vorhandensein von function_exists()?
Freundliche Grüße
Vinzenz
echo $begrüßung;
die hätte ich auch empfohlen. Aber wie überprüfe ich das Vorhandensein von function_exists()?
Man sollte annehmen können, dass bestimmte core-Funktionalitäten vorhanden sind, wenn man ein Programm/System aufsetzt.
echo "$verabschiedung $name";