Mario: error_reporting innerhalb Html

Hallo,

die Error werden ja immer ausserhalb vom HTML angezeigt, weil ja auch der Aufruf sich oberhalb befindet. Aber auf manchen Seiten sieht man das ja auch anders, eben mitten im Layout.

Wie kann ich das im HTML anzeigen lassen?

Mario

  1. Moin!

    die Error werden ja immer ausserhalb vom HTML angezeigt, weil ja auch der Aufruf sich oberhalb befindet. Aber auf manchen Seiten sieht man das ja auch anders, eben mitten im Layout.

    Wie kann ich das im HTML anzeigen lassen?

    Indem man vernünftiges Error-Handling in seine Skripte einbaut.

    Das Abfangen fast beliebiger auftretender PHP-Fehler erledigt beispielsweise die Funktion set_error_handler() - auf diese Weise bricht das Skript nicht sofort ab, sondern erlaubt die Ausführung von eigenem Code, um das Problem auf userkompatible Weise zu behandeln.

    Noch besser allerdings wäre, wenn die Skripte keinerlei vermeidbaren Fehler enthalten würden (das sind Dinge wie Syntaxfehler, die nur am Code liegen), und auf dynamisch auftretende Fehler (wie z.B. "Datenbank plötzlich unerreichbar") schon im Programmcode entsprechend vernünftig reagieren.

    Außerdem ist anzumerken, dass die Ausgabe der Fehler direkt an den Browser des Benutzers auf Produktivsystemen keine sehr gute Idee ist. In der Regel wird der Benutzer damit nichts anzufangen wissen, er kann den Fehler auch nicht beheben, allerdings erhalten Angreifer möglicherweise wertvolle Hintergrundinformationen. Deshalb ist auf Produktivsystemen die Fehlerausgabe an den Browser immer abgeschaltet und durch ein Logging in eine Datei ersetzt. Die Datei wird dann (gern automatisiert) auf auftretende Fehler überprüft, damit man ggf. einschreiten kann.

    - Sven Rautenberg

    1. Hallo,

      »» die Error werden ja immer ausserhalb vom HTML angezeigt, weil ja auch der Aufruf sich oberhalb befindet.

      wenn man HTML- und PHP-Code sauber trennt, ja.

      »» Aber auf manchen Seiten sieht man das ja auch anders, eben mitten im Layout.

      Ja.

      Indem man vernünftiges Error-Handling in seine Skripte einbaut.
      Das Abfangen fast beliebiger auftretender PHP-Fehler erledigt beispielsweise die Funktion set_error_handler() - auf diese Weise bricht das Skript nicht sofort ab, sondern erlaubt die Ausführung von eigenem Code, um das Problem auf userkompatible Weise zu behandeln.

      Abgesehen von diesem Ansatz gilt natürlich, dass PHP-Fehler da angezeigt werden, wo die entsprechende PHP-Anweisung im Code steht. Wenn also jemand HTML- und PHP-Code in schöner Spaghetti-Manier mischt, dann können PHP-Fehler auch mitten in HTML-Elementen angezeigt werden.

      Ciao,
       Martin

      --
      Wer schläft, sündigt nicht.
      Wer vorher sündigt, schläft besser.
    2. Hi,

      »» Wie kann ich das im HTML anzeigen lassen?

      Indem man vernünftiges Error-Handling in seine Skripte einbaut.

      darum frage ich ja.

      Das Abfangen fast beliebiger auftretender PHP-Fehler erledigt beispielsweise die Funktion set_error_handler() - auf diese Weise bricht das Skript nicht sofort ab, sondern erlaubt die Ausführung von eigenem Code, um das Problem auf userkompatible Weise zu behandeln.

      Ich hätte vielleicht erwähnen sollen das es hauptsächlich um Notices geht. Somit hoffte ich auf eine einfache  Alternative zu error_reporting(), zum Vergleich so wie das Gegenstück von var_dump => var_export oder parameter true.

      Noch besser allerdings wäre, wenn die Skripte keinerlei vermeidbaren Fehler enthalten würden (das sind Dinge wie Syntaxfehler, die nur am Code liegen), und auf dynamisch auftretende Fehler (wie z.B. "Datenbank plötzlich unerreichbar") schon im Programmcode entsprechend vernünftig reagieren.

      Das wäre immer besser. Aber in der Entwicklungsversion ist das legitim.

      Außerdem ist anzumerken, dass die Ausgabe der Fehler direkt an den Browser des Benutzers auf Produktivsystemen keine sehr gute Idee ist. In der Regel wird der Benutzer damit nichts anzufangen wissen, er kann den Fehler auch nicht beheben, allerdings erhalten Angreifer möglicherweise wertvolle Hintergrundinformationen. Deshalb ist auf Produktivsystemen die Fehlerausgabe an den Browser immer abgeschaltet und durch ein Logging in eine Datei ersetzt. Die Datei wird dann (gern automatisiert) auf auftretende Fehler überprüft, damit man ggf. einschreiten kann.

      Damit hat der User nichts zu tun. In all meinen Systemen habe ich eine Error-Konfiguration, die mir erlaubt Fehler anzuzeigen oder abzuschalten. Wenn ich nun neue Module einsetze, teste ich dieses mit Ausgabe, vorzugsweise Nachts. Denn was lokal richtig sein kann muss nicht am Onlinesystem so sein. Zumal der Aufwand bei gewachsenen Modul/CMS-Systemen dieses lokal zu testen auch noch zu immens wird. Da reicht mir ein Backup auf dem Server.

      Es ist nur so, dass ich lieber die Fehlermeldungen innerhalb des HTML hätte, damit designtechnisch das Ganze in Ordnung bleibt.

      Vielleicht schaue ich mir mal an wie Joomla das löst.

      Mario

      1. echo $begrüßung;

        Ich hätte vielleicht erwähnen sollen das es hauptsächlich um Notices geht. Somit hoffte ich auf eine einfache Alternative zu error_reporting(), zum Vergleich so wie das Gegenstück von var_dump => var_export oder parameter true.

        Vermutlich kennst du das Kapitel Error Handling and Logging noch nicht.

        » Noch besser allerdings wäre, wenn die Skripte keinerlei vermeidbaren Fehler enthalten würden (das sind Dinge wie Syntaxfehler, die nur am Code liegen), und auf dynamisch auftretende Fehler (wie z.B. "Datenbank plötzlich unerreichbar") schon im Programmcode entsprechend vernünftig reagieren.
        Das wäre immer besser. Aber in der Entwicklungsversion ist das legitim.

        Man sollte gleich von Anfang an die Fehlerbehandlung mit einarbeiten, denn sie greift üblicherweise entscheidend in den Programmfluss ein. Sie nachher anzuflanschen kann ich mir nicht als ordentliche Lösung vorstellen. Drauf verzichten kann man eigentlich nur im Labor, beim Probieren von Dingen.

        Damit hat der User nichts zu tun. In all meinen Systemen habe ich eine Error-Konfiguration, die mir erlaubt Fehler anzuzeigen oder abzuschalten. Wenn ich nun neue Module einsetze, teste ich dieses mit Ausgabe, vorzugsweise Nachts. Denn was lokal richtig sein kann muss nicht am Onlinesystem so sein. Zumal der Aufwand bei gewachsenen Modul/CMS-Systemen dieses lokal zu testen auch noch zu immens wird. Da reicht mir ein Backup auf dem Server.

        Da fallen mir bessere Lösungen ein. Zum einen findet man im oben verlinkten Handbuch-Kapitel Möglichkeiten, Fehler auszugeben, sie aber nicht auf der Webseite anzeigen zu lassen. Zum anderen kann man ein Parallel-System aufsetzen und dort neue Sachen testen. Dann kann man auch tagsüber Versuche anstellen.

        Es ist nur so, dass ich lieber die Fehlermeldungen innerhalb des HTML hätte, damit designtechnisch das Ganze in Ordnung bleibt.

        Schrieb dir doch einen Error-Handler, der die Fehlermeldungen und begleitende Informationen (aktuelle Variablen, Funktionsparameter, Aufrufstack) mittels Javascript in einem Extra-Fenster anzeigt. (Das ganze am besten ein- und ausklappbar, sonst verliert man schnell die Übersicht aufgrund der Masse an begleitenden Informationen.) Das heißt, der Error-Handler erzeugt den Javascript-Code und fügt ihn in die normale Ausgabe ein. Das beeinflusst das übrige Layout zwischen "gar nicht" und "nur geringfügig".

        echo "$verabschiedung $name";