Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Eigene Fehlerbehandlung in PHP

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Fox Mulder
PostRank 8
PostRank 8
Beiträge: 804
Registriert: 16.11.2004, 09:06

Beitrag von Fox Mulder » 19.04.2006, 11:54

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?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Lutz-Development
PostRank 7
PostRank 7
Beiträge: 530
Registriert: 31.05.2004, 09:52

Beitrag von Lutz-Development » 19.04.2006, 12:19

Hi,

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

Gruß,
Thomas

thetrasher
PostRank 5
PostRank 5
Beiträge: 238
Registriert: 31.12.2005, 10:50
Wohnort: Bad Tölz

Beitrag von thetrasher » 19.04.2006, 12:19

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?!

Fox Mulder
PostRank 8
PostRank 8
Beiträge: 804
Registriert: 16.11.2004, 09:06

Beitrag von Fox Mulder » 19.04.2006, 12:43

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?

derHund
PostRank 5
PostRank 5
Beiträge: 296
Registriert: 08.01.2005, 14:39

Beitrag von derHund » 19.04.2006, 12:53

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.

fornex
PostRank 4
PostRank 4
Beiträge: 154
Registriert: 01.03.2006, 01:14
Wohnort: :tronhoW

Beitrag von fornex » 19.04.2006, 14:51

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.
Suche Linkpartner für Bereiche:
Flirt - Fun - Erotik - 1 Click Hoster

ICQ: 7o7727

Googlebot versteht Javascript

fornex
PostRank 4
PostRank 4
Beiträge: 154
Registriert: 01.03.2006, 01:14
Wohnort: :tronhoW

Beitrag von fornex » 19.04.2006, 15:01

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;;
Suche Linkpartner für Bereiche:
Flirt - Fun - Erotik - 1 Click Hoster

ICQ: 7o7727

Googlebot versteht Javascript

Fox Mulder
PostRank 8
PostRank 8
Beiträge: 804
Registriert: 16.11.2004, 09:06

Beitrag von Fox Mulder » 19.04.2006, 15:18

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.

Christophe
PostRank 5
PostRank 5
Beiträge: 246
Registriert: 13.12.2004, 13:07

Beitrag von Christophe » 19.04.2006, 17:22

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.

derHund
PostRank 5
PostRank 5
Beiträge: 296
Registriert: 08.01.2005, 14:39

Beitrag von derHund » 19.04.2006, 18:17

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.

fornex
PostRank 4
PostRank 4
Beiträge: 154
Registriert: 01.03.2006, 01:14
Wohnort: :tronhoW

Beitrag von fornex » 20.04.2006, 22:46

derHund hat geschrieben:wer eval() verwendet, ist selbst schuld.
Deine Dämlichkeit kennt keine Grenzen.
Suche Linkpartner für Bereiche:
Flirt - Fun - Erotik - 1 Click Hoster

ICQ: 7o7727

Googlebot versteht Javascript

fornex
PostRank 4
PostRank 4
Beiträge: 154
Registriert: 01.03.2006, 01:14
Wohnort: :tronhoW

Beitrag von fornex » 20.04.2006, 22:53

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)
Suche Linkpartner für Bereiche:
Flirt - Fun - Erotik - 1 Click Hoster

ICQ: 7o7727

Googlebot versteht Javascript

Fox Mulder
PostRank 8
PostRank 8
Beiträge: 804
Registriert: 16.11.2004, 09:06

Beitrag von Fox Mulder » 21.04.2006, 07:09

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.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag