lck wrote:Beispiel Plugin-Fehler, Ausgabe am Ende der Seite. Im Quelltext sieht die Meldung so aus:
Zur Klarstellung: das passiert nur, wenn die Funktion im Template aufgerufen wird, und der Debug-Modus aktiviert ist.
lck wrote:So ist es natürlich unmöglich, die Meldung anders zu gestalten und zu positionieren, da in kein div eingefasst und keine id oder class vorhanden. Da diese durch PHP ausgelöst wird, wird man da auch nichts daran ändern können, oder?
Komplexes Thema. Zunächst mal ist hier display_errors relevant. Nur wenn dieses aktiv ist, wird von PHP überhaupt eine Fehlermeldung ausgegeben (auf die man dann aber keine Einfluss hat). Eigentlich sollte display_errors auf einem Produktionsssytem nie aktiv sein, und für unseren Debug-Modus wäre es normalerweise auch nicht nötig. Zum Ausprobieren kann man in
dieser Zeile die 1 in 0 ändern. Dann wird bei aktiviertem Debug-Modus zunächst gar keine Meldung mehr angezeigt. Ist der Debug-Modus deaktiviert, dann sieht man einen konfigurierbaren Sprach-Text, etwa "A fatal error occurred. Enable debug mode for further information." Dieser wird
im Shutdown-Handler erzeugt, aber eben nur, falls der Debug-Modus nicht aktiv ist. Man könnte das leicht ändern, so dass dieser Text (na ja, müsste natürlich umformuliert werden) immer angezeigt wird. Dieser Text könnte auch gestylt werden.
Allerdings ist es natürlich fraglich, eine solche Meldung überhaupt anzuzeigen. Das wurde eben v.a. wegen dem Problem eines fehlerhaften Funktionsaufrufs im Template eingeführt. Klar: ohne die Fehlermeldung kann man leicht denken, dass alles okay ist, wenn der Fehler erst weit unten im Template auftritt; aber dann gibt es andere Probleme ("Invalid CSRF Token").
Dann gibt es grundsätzlich die Möglichkeit, es erst gar nicht zu einem Fehler kommen zu lassen, indem man im Template schreibt:
Code: Select all
<?php if (function_exists('jm_landingpage')) jm_landingpage()?>
Ist aber auch suboptimal, weil man dann vielleicht nicht mal merkt, dass jm_landingpage nicht installiert ist. Um dem Abzuhelfen, könnte man einen else-Zweig ergänzen, der eine Fehlermeldung anzeigt, aber da wären wir wieder bei dem Problem, dass eine solche Meldung eigentlich nicht schön ist (genau wie die Meldung eines fehlschlagenden Pluginaufrufs im Frontend).
Aus Sicherheitsgründen ist es auf jeden Fall von Vorteil, wenn keine spezifischen Angaben zum Fehler im Frontend angezeigt werden, da dies einem Angreifer wertvolle Informationen liefern könnte.
Eine denkbare Lösung für dieses Dilemma wäre vielleicht, die
konkreten Fehlermeldungen zu protokollieren, und display_errors immer zu deaktivieren. Dann müsste der Admin unter Umständen eben in der Protokolldatei nachschauen, um genaueres zu erfahren. Ein Nachteil dieser Variante wäre, dass zumindest bei voll aktiviertem Debug-Modus, das Logfile durch eine Menge weniger wichtiger Meldungen (deprecated, notice) vollgemüllt würde, was auch wieder verwirren kann. Ein großer Vorteil dieser Protokollierung wäre allerdings, dass man auch Fehlerhinweise erhält, die einem selbst nie begegnen würden (z.B. weil sie nur im Frontend auftreten).