quakenet:#php Tutorial

Author: Progman, zuletzt bearbeitet von progman @ 2006/03/13 17:04:41

Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.

Fehler in PHP

  1. Fehler in PHP
  2. Fatal Error
  3. Warnungen
  4. Parse Error
  5. Notices
  6. Alle Fehler anzeigen
  7. error_reporting()
  8. Die Fehlerkonstanten

1. Fehler in PHP

Bei der Verarbeitung oder beim Parsen eines Scriptes kann es natürlich zu Programmfehlern kommen. Diese Programmfehler werden dann durch PHP angezeigt. Es gibt 11 verschiedene Fehlergruppen, wobei wir aber nur 4 kennenlernen werden.

2. Fatal Error

Ein Fatal Error ist ein sehr ernster Fehler. Wenn so ein Fehler auftritt wird die Abarbeitung des Scripts sofort beendet. Z.B. wenn der Speicher, der zu Verfügung steht, voll ist. Dann kann PHP nicht mehr weiterarbeiten und bricht ab.

3. Warnungen

Warnungen in PHP brechen die Abarbeitung des Scripts nicht ab. Folgendes Script würde eine Warnung ausgeben.

<?php
    
echo 1/0;
?>

Ausgabe wie folgt.

Warning: Division by zero in /.../bla.php on line 2
        

Da wir hier durch 0 teilen, was nicht erlaubt ist, wird hier eine Warnung ausgegeben. Doch dieser Fehler ist nicht so schlimm und beendet nicht das Script. Als Programmierer sieht man dann die Zeilennummer und guckt sich diese an und versucht dann den Fehler zu beheben.

4. Parse Error

Parse Errors sind Schreibfehler im Script wie z.B. Semikolon oder das Anführungszeichen nach einem String vergessen.

<?php
    $name
= "Progman"
    
echo $name;
?>

Hier wurde das Semikolon hinter der Wertzuweisung vergessen. PHP erzeugt dann folgende Ausgabe.

Parse error: parse error in /..../bla.php on line 3
        

Diese Fehlermeldung ist zuerst etwas verwirrend. Wir haben in Zeile 2 das Semikolon vergessen, doch er sagt line 3. Das ist deshalb weil PHP dachte das vielleicht noch was kommt was dazugehört. Man hätte auch noch einen weiteren String mit . anhängen können. Doch für PHP kommt unerwartet ein echo-Befehl. Das kann er nicht verarbeiten und bricht die Verarbeitung ab. Bei einem Parse Error ist der Fehler zu 99% in der Zeile darüber, meistens fehlt dort ein Semikolon. In den anderen 1% Fällen ist der Fehler wirklich in dieser Zeile oder in ein paar Zeilen dadrüber, weil man ein " vergessen hat. Auch fehlende Klammern (sowohl "normale" als auch geschweifte) führen zu einem Parse Error, also nicht nur die Semikolons, sondern auch die Klammern überprüfen.

5. Notices

Der unbedeutenste Fehler ist eine Notiz bzw. ein Notice. Notices unterbrechen ein Script nicht. Sie geben zum Beispiel Auskunft dass eine Variable ausgegeben wurde, in die man noch garkein Wert reingeschrieben hat, oder das ein $array[bla] in $array['bla'] umgewandelt wurde. Nur weil diese Fehler nicht so wichtig sind, heißt es nicht, dass sie nicht behoben werden müssen. Und es sieht nunmal schlecht aus, wenn jemand eure Seite besucht, etwas rumsurft und dann das hier erscheint.

Notice: Undefined variable: var in /.../bla.php on line 3
        

Dies macht sich nicht gut. Deswegen sollte man diese Fehler wie jeden anderen Fehler auch beheben. Am einfachsten geht das, indem man Variablen vor dem benutzen einfach initialisiert.

<?php
$name
= ''; // initalisiert einen String
$zahl = 0; // initialisiert einen Integer
$bereich = array(); // initialisiert ein Array
?>

6. Alle Fehler anzeigen

In PHP kann man steuern, welche Fehler angezeigt werden sollen und welche nicht. Man kann z.B. sagen "Zeige nur Parse-Errors und Fatal-Errors an, alle anderen nicht". Doch was soll das bringen? Garnix, es bringt garnix. Das ist so als würde man sich beim Fahren die Ohren zuhalten nur um den kaputten Keilriemen nicht zu hören. Dies wäre, symbolisch gesehen, eine Notice in PHP. Aber beheben muss man den Defekt trotzdem. Man sollte nicht die Fehler die man in PHP fabriziert vor sich herschieben.

Leider ist PHP so eingestellt das alle Fehler bis auf die Notice ausgegeben werden. Doch mit dieser Einstellung könnte unser Script nicht so laufen wie es sollte. Manche Variablen werden nicht ausgegeben oder manche Zugriffe auf Arrayelemente sind ungültig und wir fragen uns Warum verdammt nochmal wird nix ausgegeben????ßßß (man beachte die ß am ende, sehr beliebt in #php, genauso wie der darauffolgende kickban). Deswegen müssen wir PHP sagen dass wir alle Fehler ausgegeben bekommen haben wollen (Fatale Plusquamscheisse, scheiss Deutsch...). Da wir auf die php.ini sehr wahrscheinlich nicht zugreifen können, brauchen wir eine Funktion die PHP so einstellt, dass alle Fehler ausgegeben werden. Dies geht mit der Funktion error_reporting.

7. error_reporting()

Im Manual zu error_reporting sieht man, dass diese Funktion einen optionalen Integer-Parameter erwartet. Mit dieser Zahl wird angegeben welche Fehlermeldungen angezeigt werden und welche nicht. Dabei steht 1 für Fatal Error, 2 für Warning, 4 für Parse Error, und 8 für Notice. Die Zahlen, von denen wir die Fehlermeldung erhalten wollen, werden addiert und der Funktion error_reporting übergeben.

<?php
    error_reporting
(1);       // es werden nur Fatal Error angezeigt
    
error_reporting(8);       // es werden nur Notice angezeigt
    
error_reporting(2+4);     // es werden nur Warnungen(2) und
                              // Parse Error(4) angezeigt
    
error_reporting(6);       // siehe oben (6 = 2+4)
    
error_reporting(1+2+4+8); // es werden Fatal Error, Warnings, Parse Error
                              // und Notices ausgegeben
    
error_reporting(15);      // siehe oben (1+2+4+8 = 15)
    
error_reporting(0);       // gibt keine Fehlermeldungen aus
?>

Wir können selbst bestimmen welche Fehlermeldungen wir sehen wollen oder nicht. Mit 0 können wir sagen, dass garkeine Fehler ausgegeben werden sollen. Aber dadurch werden sie nicht behoben. Dies ist absolut nicht zu empfehlen. (Der Motor macht aber komische Geräusche. Ich pack mal Schaumstoffmatten in den Motorraum, dass dämpft den Schall...)

8. Die Fehlerkonstanten

Wir haben jetzt immer die entsprechenden Zahlen addiert und dann error_reporting übergeben. Aber es gibt noch viel mehr Errorgruppen. Es gibt 11 Fehlergruppen. Dementsprechend gibt es nicht die Zahlen 1, 2, 4 und 8 sondern auch noch 16, 32, 64, 128, 256, 512 und 1024. Diese stehen jeweils für eine Errorgruppe und können addiert und an error_reporting übergeben werden, wenn man diese Fehlermeldungen sehen möchte. Dabei können dann solche Zahlen wie 674 oder 234 rauskommen.

<?php
    error_reporting
(674);
?>

Doch keiner kann sich die Zahlen merken, welche Zahl für welche Error-Gruppe steht. Aber es gibt ja Konstanten.

PHP kennt eine Menge Fehlerkonstanten, wobei jede Fehlerkonstante für eine Fehlergruppe steht und den entsprechenden Wert besitzt. Alle Fehlerkonstanten fangen mit E_ an. Die Gruppe der Fatal-Error ist die Fehlerkonstante E_ERROR und hat den Wert 1. Hier ist eine Liste der Fehlerkonstanten.

1       E_ERROR
2       E_WARNING
4       E_PARSE
8       E_NOTICE
16      E_CORE_ERROR
32      E_CORE_WARNING
64      E_COMPILE_ERROR
128     E_COMPILE_WARNING
256     E_USER_ERROR
512     E_USER_WARNING
1024    E_USER_NOTICE
2047    E_ALL
        

Diese Fehlerkonstanten sind einfacher zu Merken und können in error_reporting benutzt werden.

<?php
    error_reporting
(E_ERROR);           // nur Fatal Errors
    
error_reporting("E_ERROR"); // ist falsch, Parameter muss
                                // eine Zahl sein, kein String
    
error_reporting(E_ERROR + E_PARSE); // nur Fatal und Parse Error
?>

In der Liste oben seht ihr ganz unten eine Konstante E_ALL. Wenn man diese Konstante für error_reporting() benutzt, werden alle Fehler in PHP angezeigt. Also benutzen wir diese auch.

<?php
    error_reporting
(E_ALL); // alle Fehler anzeigen
?>

Somit werden alle Fehler in PHP angezeigt. Dies solltet ihr in eurem PHP-Scripten ganz oben hinschreiben, direkt nach dem <?php. Im weiteren Verlauf des Tutorials wird dies nun immer oben hingeschrieben.

Fragen zum aktuellen Thema

  1. Wie wird das Error-Level bearbeitet?
Wie wird das Error-Level bearbeitet?

Mit der Funktion error_reporting kann man das Error-Level für das aktuelle Script verändern. Somit kann man in seinem Script steuern welche Fehler angezeigt werden sollen und welche nicht.

Nach oben