Seite 1 von 1

Eigene Fehlerbehandlung in PHP

Verfasst: 19.04.2006, 11:54
von Fox Mulder
Ich habe eine (so dachte ich ) einfache Routine zur eigenen Fehlerbehandlung in PHP , bei der ich mich hier orientiert habe:
https://de.php.net/manual/de/ref.errorfunc.php

Code: Alles auswählen

<?php

error_reporting&#40;0&#41;;

function userErrorHandler &#40;$errno, $errmsg, $filename, $linenum, $vars&#41; &#123;

    $dt = date&#40;"Y-m-d H&#58;i&#58;s &#40;T&#41;"&#41;;

    $err .= "\t<datetime>".$dt."</datetime>\n";
    $err .= "\t<errornum>".$errno."</errornum>\n";
    $err .= "\t<errortype>".$errortype&#91;$errno&#93;."</errortype>\n";
    $err .= "\t<errormsg>".$errmsg."</errormsg>\n";
    $err .= "\t<scriptname>".$filename."</scriptname>\n";
    $err .= "\t<scriptlinenum>".$linenum."</scriptlinenum>\n";
    $err .= "\t<vartrace>".wddx_serialize_value&#40;$vars,"Variables"&#41;."</vartrace>\n";

    
    // Fehlerausgabe
    echo "Das ist meine Fehlerausgabe&#58;".$err;
 
&#125;

set_error_handler&#40;"userErrorHandler"&#41;;


// absichtlicher Fehler
blabla = 1111
// absichtlicher Fehler

echo "Fertig";
?>
Der absichtliche Fehler den ich eingbaut habe, wird bei mir aber nicht durch die Funktion "userErrorHandler" abgefangen, obwohl ich das mit "set_error_handler("userErrorHandler")" so definiert habe, sondern ganz normal im Browser ausgegeben.

Warum klappt denn der Quark nicht?

Verfasst:
von

Eigene Fehlerbehandlung in PHP

Verfasst: 19.04.2006, 12:19
von Lutz-Development
Hi,

schau mal in deine php.ini, wie deine Einstellungen zum Errorhandling dort sind.

Gruß,
Thomas

Eigene Fehlerbehandlung in PHP

Verfasst: 19.04.2006, 12:19
von thetrasher
https://de.php.net/manual/en/function.set-error-handler.php hat geschrieben: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.
Die Fehlerbehandlungsroutine wird bei einem Fehler erst gar nicht aufgerufen. :roll:

Deutscher Lesegenuss: https://de.php.net/manual/de/function.s ... andler.php! Schau Dir das Beispiel an; set_error_handler wird dort zum Abfangen von trigger_error verwendet. Die benutzerdefinierte Funktion zur Fehlerbehandlung fängt eine benutzerdefinierte Fehlermeldung ab. Klingt doch logisch?!

Re: Eigene Fehlerbehandlung in PHP

Verfasst: 19.04.2006, 12:43
von Fox Mulder
thetrasher hat geschrieben:Die Fehlerbehandlungsroutine wird bei einem Fehler erst gar nicht aufgerufen.
Offensichtlich habe ich den Sinn der Fehlerbehandlungsroutine nicht verstanden.

Dann nochmal ganz von vorne:
Wie fängt man Fehler (Codingfehler etc.) in PHP ab, so dass man sie z.B. per Mail an den Webmaster versenden kann?

Eigene Fehlerbehandlung in PHP

Verfasst: 19.04.2006, 12:53
von derHund
Wie fängt man Fehler (Codingfehler etc.) in PHP ab, so dass man sie z.B. per Mail an den Webmaster versenden kann?
gar nicht! wenn du fehler im code hast, solltest du die beseitigen, bevor das projekt online geht!

den rest (input vom user, den du irgendwie verarbeitest, der eine notice wirft, etc.) kannst du mit o.g. abfangen.

Re: Eigene Fehlerbehandlung in PHP

Verfasst: 19.04.2006, 14:51
von fornex
derHund hat geschrieben:gar nicht!
bitte, erst denken/lesen/googeln und dann schreiben.

@Fox, geht es um PHP4 oder 5?

https://php5.de/manual/de/function.ob-start.php wird dir bestimmt weiterhelfen.

Eigene Fehlerbehandlung in PHP

Verfasst: 19.04.2006, 15:01
von fornex
Ich bin heute Abend nicht da, deswegen schrieb ich dir sofort ein paar Ansätze für die Lösung:

Code: Alles auswählen

<?php

ob_start&#40; "cache_handler" &#41;;
echo "Irgendein Scheiß";
eval&#40; "gibtsNed&#40;&#41;;" &#41;;
echo "Noch was";

function cache_handler&#40; $text &#41; 
&#123;
    return "$text<hr>Hi, ich bin der Errorhandler!";
&#125;
?>
nun, die Ausgabe wird folgendermaßen aussehen:

Code: Alles auswählen

Irgendein Scheiß
Fatal error&#58; Call to undefined function&#58; gibtsned&#40;&#41; in e.php&#40;7&#41; &#58; eval&#40;&#41;'d code on line 1
--------------------------------------------------------
Hi, ich bin der Errorhandler!
Die Variable $text enthält ein Teil der Fehlermeldung, die du mit Regex überprüfen kannst:

Ungefähr so:

Code: Alles auswählen

preg_replace&#40; '/&#40;<\?=&#41; &#40;.*?&#41; &#40;?&#58; \s*;&#41;* \s* &#40;\? >&#41;/sx',  '$1htmlspecialchars&#40;$2, ENT_QUOTES&#41;$3', $text &#41;;

Re: Eigene Fehlerbehandlung in PHP

Verfasst: 19.04.2006, 15:18
von Fox Mulder
fornex hat geschrieben:bitte, erst denken/lesen/googeln und dann schreiben.

@Fox, geht es um PHP4 oder 5?
Es geht um PHP5 und ich habe schon eine Menge gegoogelt.
Wundert mich das das bei PHP so exotisch ist?
Lasst Ihr alle Eure Webanwendungen laufen ohne Fehlerroutine??
Testen bevor es online geht, schön und gut, aber die richtig schnuckeligen Fehler treten doch meist erst dann auf wenn die Kiste online ist.

Verfasst: 19.04.2006, 17:22
von Christophe
Ich habe habe versucht alle Fehler "per Hand" mit einer eigenen Fehlerroutine abzufangen:

Code: Alles auswählen

@funktion&#40;&#41;
  or fehlerbehandlung&#40;&#41;;
Das ist aber sehr umständlich in der Praxis. An anderen Methoden bin ich sehr interessiert.

Re: Eigene Fehlerbehandlung in PHP

Verfasst: 19.04.2006, 18:17
von derHund
bitte, erst denken/lesen/googeln und dann schreiben.
ja, dann tu das bitte auch!
Testen bevor es online geht, schön und gut, aber die richtig schnuckeligen Fehler treten doch meist erst dann auf wenn die Kiste online ist.
das sind dann aber nicht die fehler, die von php moniert werden, oder? eher die logischen/konzeptionellen.

wenn dir fatal erros erst in der online-version auffallen, machst du wirklich was falsch. und - wer eval() verwendet, ist selbst schuld.

Re: Eigene Fehlerbehandlung in PHP

Verfasst: 20.04.2006, 22:46
von fornex
derHund hat geschrieben:wer eval() verwendet, ist selbst schuld.
Deine Dämlichkeit kennt keine Grenzen.

Re: Eigene Fehlerbehandlung in PHP

Verfasst: 20.04.2006, 22:53
von fornex
Fox Mulder hat geschrieben:Es geht um PHP5 und ich habe schon eine Menge gegoogelt.
@Fox, googleln war nicht für dich gemeint.

Wenns um PHP5 geht, wieso benutzt du einfach nicht:
try{ } catch () {}
Lasst Ihr alle Eure Webanwendungen laufen ohne Fehlerroutine??
Auf keinem Fall! Wenn es um eine umfangreiche und belastungsfähige Webanwendung geht, muss man auf jeden Fall eine Fehlerrotine einbauen.
(Server überlastet/Datenbank nicht da/zu wenig RAM und noch sonst was passieren könnte)

Re: Eigene Fehlerbehandlung in PHP

Verfasst: 21.04.2006, 07:09
von Fox Mulder
fornex hat geschrieben:Wenns um PHP5 geht, wieso benutzt du einfach nicht:

Zitat:
try{ } catch () {}
Ja, vom Ansatz hatte ich mir das angesehen. Aber mir ist unklar wie ich das (zentral) mit vertretbarem Aufwand einbauen soll. Ich muss ja dann in jedem PHP Dokument try/catch Blöcke einfügen. Schöner wäre wenn man das zentral steuern könnte.