öffentlich
öffentlich
Redaktion Druckversion

PHP lernen (1): Einführung, Installation und erste Schritte

Fehlerbehandlung

Inzwischen haben Sie sicher schon die eine oder andere Fehlermeldung Ihres PHP-Parsers gesehen. Beim Programmieren mit PHP werden Sie immer wieder Fehlermeldungen des PHP-Parsers erhalten, wenn Sie Ihr Skript über einen Browser testen. Diese Meldungen verraten Ihnen im Idealfall, was Sie falsch gemacht haben. Um den Umgang mit diesen Fehlermeldungen geht es in diesem Abschnitt.

Einstellung der php.ini

Prinzipiell wird die Ausgabe von Fehlern und Warnungen in der php.ini gesteuert, die in Ihrem Systemverzeichnis liegt, also z. B. in c:\windows. Bei einer Installation mit XAMPP könnte sie auch im Verzeichnis xampp liegen. Suchen Sie nach der php.ini und öffnen Sie diese Datei einmal in einem Editor. Sie brauchen keine Änderungen in der php.ini vornehmen! Wir betrachten die Datei nur, um die unterschiedlichen Fehlerlevel zu verstehen.

In dieser Datei ist das Semikolon ; am Zeilenanfang ein Kommentarzeichen. Die php.ini führt also Zeilen mit Semikolon ; am Anfang nicht aus, diese Zeilen dienen nur als Erläuterung. Sie können auch eigene Kommentare ergänzen, die Sie mit einem Semikolon am Zeilenanfang auskommentieren.

Suchen Sie in der php.ini einen Bereich Error handling and logging. In diesem Abschnitt der php.ini wird der Level der PHP-Fehlermeldungen festgelegt. Zunächst werden die unterschiedlichen Level erläutert. Hier sehen Sie einen Ausschnitt aus einer php.ini:

;reporting level
;E_ALL -All errors and warnings
;E_ERROR -fatal run-time errors
;E_WARNING -run-time warnings (non-fatal errors)
;E_PARSE -compile-time parse errors
;E_NOTICE -run-time notices (these are warnings which often result
;from a bug in your code, but it's possible that it was
;intentional (e.g., using an uninitialized variable and
;relying on the fact it's automatically initialized to an
;empty string))
...
error_reporting  =  E_ALL & ~E_NOTICE

Je nach PHP-Version werden Sie hier andere Level definiert sehen. Die Standardeinstellungen und die Level der Fehlermeldungen ändern sich leider noch von Version zu Version von PHP.

Alle Zeilen beginnen mit einem Semikolon, sind also lediglich Erläuterungen. Einzig die letzte Zeile mit error_reporting = E_ALL & ~E_NOTICE bestimmt den Level der Fehlermeldungen. Was hinter dem Gleichheitszeichen steht, ist ausschlaggebend für die Anzeige der Fehler. In diesem Fall wird der PHP-Parser alle Fehler außer Notizen ausgeben. Das ist wahrscheinlich die Einstellung, die Sie in Ihrer php.ini vorfinden. Was bedeuten die einzelnen Level?

E_ERROR und E_PARSE sind Laufzeitfehler, die einen sofortigen Programmabbruch zur Folge haben. Ein solcher Fehler tritt auf, wenn Sie einen falschen Funktionsnamen benutzen und so eine Funktion aufrufen, die PHP unbekannt ist. Ein fehlendes Semikolon am Ende einer Anweisung oder nicht korrekt gesetzte geschweifte Klammern können ebenfalls einen solchen Fehler auslösen. (Zur korrekten Syntax in PHP kommen wir weiter unten und auch in den folgenden Teilen). Die Anzeige solcher Fehler brauchen Sie unbedingt, um in PHP Programme entwickeln zu können und Fehler in Ihren Skripten zu finden.

E_WARNING zeigt Laufzeitfehler an, die nicht zu einem Programmabbruch führen, aber nützlich sein können, um einen Bug in Ihrem Programm zu finden. Ein solcher Fehler könnte sein, wenn Sie eine Funktion mit falschen Parametern aufrufen. Zum Gebrauch von Funktionen und wie man die richtigen Parameter findet, kommen wir weiter unten. Warnungen sollten Sie auch einschalten.

E_NOTICE zeigt Fehler an, die die Ausführung des Skriptes nicht unbedingt beeinträchtigen. Bei der Entwicklung eigener Skripte kann dieser Level nützlich sein, um einen Bug zu finden, der zwar nicht gleich Ihr Programm abbricht, aber dennoch zu einem unklaren Verhalten Ihres Skripts führt. Der Level zeigt auch an, wenn Sie mit Variablen nicht richtig umgehen. Zu Variablen lernen Sie mehr in den kommenden Abschnitten. Ob Sie E_NOTICE einschalten oder nicht, ist Geschmackssache. Nicht jeder Fehler, den PHP mit E_NOTICE bemängelt, muss beseitigt werden. Wenn Sie schlechten Stil in Ihren Skripten absolut vermeiden wollen, können Sie E_NOTICE einschalten.

E_STRICT ist ein neuer Level in PHP 5 und hilft beim Programmieren die neuesten Empfehlungen der PHP-Entwickler zu berücksichtigen. Angezeigt werden zum Beispiel Warnungen, wenn Sie veraltete Funktionen benutzen, die zwar noch voll unterstützt werden, aber in den kommenden PHP-Versionen möglicherweise nicht mehr implementiert sein werden.

E_ALL zeigt alle Fehlerlevel außer dem in PHP 5 verfügbaren E_STRICT.

Einzelne Level können Sie einschalten, indem Sie die entsprechenden Bezeichnungen rechts vom Gleichheitszeichen schreiben. Wenn Sie mehrere Level einzeln einschalten wollen, verknüpfen Sie diese mit einem kaufmännischen Und &. Explizit ausgeschaltet werden Level, wenn Sie eine Tilde ~ vor die Bezeichnung des Levels setzen. Halten Sie sich bei der Bezeichnung genau an die Definition in Ihrer php.ini.

Die Beispiele werden Sie besser verstehen, wenn Sie in den folgenden Abschnitten beginnen, mit PHP zu programmieren.

Einstellung in einzelnen Skripten

Die php.ini können Sie nicht immer erreichen, zum Beispiel bei einem Provider. Sie möchten vielleicht auch nicht die globalen Einstellungen des Fehlerlevels ändern, sondern nur in einem Projekt oder für ein konkretes Skript. Für diesen Zweck gibt es die Funktion error_reporting(). Mit dieser PHP-Funktion können Sie einzelne Level einschalten. Wollen Sie in einem Skript alle Meldungen anzeigen lassen, schreiben Sie die Konstante E_ALL als Parameter zwischen die runden Klammern:

error_reporting(E_ALL);

Ergänzen Sie diese Zeile oben in Ihrem Skript und der Parser wird Ihnen für dieses Skript alle Meldungen ausgeben unabhängig von der Einstellung in der php.ini.

Um was für einen Fehler es sich handelt, sehen Sie zu Beginn der Fehlermeldung im Browser, in der Regel im Fettdruck. Achten Sie bei der Ausgabe eines Fehlers darauf, ob es sich um eine Warnung, eine Notiz oder wirklich um einen Fehler handelt. Die Fehlermeldung versucht, Ihnen mitzuteilen, was den Parser im Skript stört. Im Laufe der Zeit werden Sie die Fehlermeldungen interpretieren lernen.

Bei einem Provider kann es sein, dass die Anzeige sämtlicher Fehler unterdrückt ist. Auch wenn Ihr Skript einen evidenten Fehler enthält, wird keine entsprechende Meldung ausgegeben. Das hat den Vorteil, dass eine Webseite nicht durch Fehlermeldungen verunstaltet wird und vor allem die Fehlermeldungen nichts über die Konfiguration des Webservers verraten, was eventuell eine Angriffsfläche für den Webserver bieten könnte.

Für das Auffinden eines Bugs in Ihrer Anwendung sind aber die Fehlermeldungen unerlässlich. Sollte ein Provider Fehlermeldungen unterdrücken, wird er irgendwo ein Verzeichnis mit Fehlerdateien stellen. Dieses Verzeichnis könnte logs heißen, die Datei error.log. Dieses Verzeichnis können Sie in der Regel über ein FTP-Programm erreichen. Manche Provider bieten eine Konfigurationsoberfläche für ihre Kunden an und zeigen hier die Fehlermeldungen von PHP an. Fragen Sie im Zweifelsfall beim Provider nach, wo die Fehlermeldungen hingeschrieben werden.

Fehlermeldungen unterdrücken

Es kann auch vorkommen, dass Sie eine Fehlermeldung bewusst ausschalten wollen. Bei einigen Funktionen erzeugt PHP immer eine Fehlermeldung, wenn sie fehlschlagen. Um dann die Fehlermeldung, die an den Browser ausgegeben wird, zu unterdrücken und gegebenenfalls durch eine eigene zu ersetzen, setzen Sie einfach vor den Funktionsaufruf, bei dem Sie eventuell einen Fehler erwarten, ein @:

<?php
if (@mail($to, $subject, $msg, $header)) {
  print "Ihre Nachricht wurde erfolgreich versendet.";
}
else {
  print "Ihre Nachricht kann zur Zeit nicht versendet werden.";
}
?>

Die Funktion mail() versendet eine E-Mail. Wir kommen in "PHP lernen (3)" noch einmal ausführlich dazu. Wichtig ist hier nur, dass PHP eine Fehlermeldung ausgibt, wenn die E-Mail aus welchen Gründen auch immer nicht versendet werden kann. Diese Meldung passt sicherlich nicht in Ihre Website, also geben Sie eigene Fehlermeldungen aus. Nun müssen Sie nur noch die PHP-Fehlermeldung unterdrücken, indem Sie dem Aufruf mail() ein @ voranstellen: @mail().

Sie werden dieses @ bei den Funktionen wieder finden, bei denen der Gebrauch üblich ist.

Fragliche Variablen ausgeben

Wenn Sie sich auf Fehlersuche in Ihren Skripten begeben, der PHP-Parser zwar keine Meldung ausgibt, das Programm aber trotzdem nicht tut, was es soll, dann geben Sie Variablen, über deren Zustand Sie sich nicht im Klaren sind, einfach an den Browser aus:

print "Variable: $variable"; // Test

Wenn Sie bei solchen Testausgaben konsequent einen eindeutigen Kommentar setzen (hier // Test), dann finden Sie diese Ausgaben später schnell wieder, um sie wieder zu löschen.

Diese Ausgaben zum Testen werden wir ebenfalls verwenden. Ihre Anwendung wird Ihnen dann sicher klarer werden.

Quelltext im Browser ansehen

Sieht die Ausgabe Ihres Skripts im Browsers nicht so aus, wie Sie es erwartet haben, ohne dass Ihr Skript eine Fehlermeldung produziert, schauen Sie in den an den Browser übertragenen Quelltext. Diesen generierten Quelltext erreichen Sie entweder über das Browsermenü Anzeige - Quelltext oder in einem Frameset, indem Sie mit der rechten Maustaste in den fraglichen Frame klicken und Quelltext anzeigen wählen.

Wenn der HTML-Code fehlerhaft ist, fällt Ihnen die Ursache für die unerwartete Anzeige hoffentlich schnell ins Auge. Hier zeigt sich bald, dass es sich lohnt, den generierten Quelltext übersichtlich zu schreiben. Dazu weiter unten mehr in den Beispielen.

Mitglied werden, Vorteile nutzen!

  • Sie können alles lesen und herunterladen: Beiträge, PDF-Dateien und Zusatzdateien (Checklisten, Vorlagen, Musterbriefe, Excel-Rechner u.v.a.m.)
  • Unsere Autoren beantworten Ihre Fragen

Downloads zu diesem Beitrag

Newsletter abonnieren