| Wie jede andere Programmiersprache zeigt auch PHP Fehler bei der Interpretation ihrer Programme an. Wenn ein Fehler auftritt, erhalten sie eine Meldung. |
In schweren Fällen wird das Programm abgebrochen. Hier finden sie einige Tipps zum Umgang mit Fehlern. |
PHP
|
PHP Hypertext Processor |
| Strategie | Generelle Planung der Fehler-behandlung |
| Konfiguration | Die Einstellungen der Konfigurationsdatei php.ini steuern die Fehlerbehandlung |
| @ | Dieses Zeichen versteckt (harmlose) Fehler |
| $php_errormsg | Diese Variable speichert Fehlermeldungen |
| ErrorHandler | Ein eigenes Programm ersetzt den Standard-ErrorHandler von PHP |
| Sonstige | Einige für das Debuggen nützliche Funktionen |
| Module | Information über geladene Module und deren Funktionen |
| Syntax-Check | Test eines PHP-Scripts mit PHP |
Fehler-Strategie |
|
Grund-Einstellung und VariantenDas Verhalten von PHP beim Auftreten von Fehlern lässt sich sehr flexibel gestalten.• Man sollte Start-Fehler und Laufzeit-Fehler unterscheiden. • Die Fehlerquelle kann in der PHP-Konfiguration liegen, bei eigenen PHP-Programmen oder bei Server-Programm-Paketen. • PHP unterscheidet schwerwiegende (letale) Fehler, korrigierbare fehler, Warnungen und Notizen. |
Die Absätze dieses Kapitels geben einige Tipps zur optimalen Gestaltung des Verhaltens von PHP beim Auftreten von Fehlern. Versuchen Sie, für jeden Fall die passende Strategie zu entwickeln. |
Start-FehlerWenn die PHP Konfiguration Fehler enthält oder deren Anweisungen nicht ausführbar sind, dann treten bereits beim Start von PHP Fehler auf. |
Startup-Fehler sollten immer angezeigt werden. In der PHP-Konfiguration setzt man
display_startup_errors = On
Ähnlich katastrophal sind Memory-Leaks: report_memleaks = On
Derartige Fehler können nur am eigenen Server auftreten und sollten
unbedingt vor jeder weiteren Arbeit behoben werden.
|
Laufzeit-Fehlersind Fehler in einzelnen PHP Script-Programmen.In eigenen Programmen sollten derartige Fehler immer angezeigt und behoben werden. In der PHP-Konfiguration setzt man display_errors = On
In diesem Fall sollten sie diese PHP Konfigurations Variablen so einstellen,
dass die Fehler auffällig angezeigt werden, z.B.
error_prepend_string = "<div style='background-color:#FF0'>"
error_append_string = "</div>" |
Die Variable error_reporting der PHP-Konfiguration bestimmt, welche Fehler angezeigt bzw. unterdrückt werden. Für eigene PHP Programme setzt man am besten error_reporting = E_ALL | E_STRICT | E_NOTICE
Diese Einstellung reagiert besonders streng. Wenn sie alle damit angezeigten
Fehler beheben, dann sind ihre Programme absolut sauber und sollten auf jedem
Standard-Server problemlos laufen.
|
Fehler in SchleifenWenn ein Fehler in einer Schleife (for..., while...) auftritt, dann könnte er theoretisch bei jedem einzelnen Durchlauf der Schleife angezeigt werden. Das kann tausende von Fehler-Meldungen ergeben. |
Um diesen Unsinn zu vehindern, setzt man in der PHP-Konfiguration
ignore_repeated_errors = Off
In diesem Fall werden auch Fehler in Schleifen nur einmal angezeigt.
ignore_repeated_source = Off |
Eigene PHP-ProgrammeAn eigene PHP Script-Programme sollte man sehr strenge Maßstäbe anlegen. Selbst scheinbar harmlose Fehler (E_NOTICE) geben oft Hinweise auf unsaubere Programmierung oder sogar auf logische Fehler. |
Am Test-Server für eigene PHP-Programme sollte jeder noch so harmlose Fehler angezeigt (und behoben) werden, z.B. mit
display_errors = On
error_reporting = E_ALL | E_STRICT | E_NOTICE |
Server-Programm-PaketeGrößere Pakete enthalten einige 100..1000 Script-Programme, leider oft mit Fehlern. Wegen der Komplexität ist es kaum möglich, diese Fehler zu beseitigen. Das macht schon deshalb keinen Sinn, weil die Fehler oft auch in nachfolgenden Versionen enthalten sind.Fehlerfreie Programm-Pakete wie → phpMyAdmin, MediaWiki oder WordPress sind leider eine seltene Ausnahme. |
Fehler-Meldungen müssen bei Programm-Paketen unterdrückt werden, da sie immer stören, manchmal sogar das Programm lahmlegen. Für diese Anwendung wird PHP so konfiguriert: display_errors = Off
Daraus ergibt sich die Notwendigkeit, am eigenen Test-Server mindestens 2 verschiedene PHP-Konfigurationen zu installieren: Eine strenge für eigene PHP-Programme und eine nachsichtige für Programm-Pakete. |
PHPRCKommerzielle Web-Provider richten am Apache Webserver meist die Umgebungs-Variable PHPRC ein: (Der folgende Text ist das Muster einer → Apache Konfiguration):
<IfModule mod_env.c>
Die Variable PHPRC bezeichnet den Pfad zu einem
Verzeichnis, in dem eine PHP Konfigurations-Datei php.ini
erwartet wird.SetEnv PHPRC /home/test/php_rc
<IfModule>
● Diese Technik wird von Web-Providern verwendet. PHPRC verweist auf ein für den Kunden zugängliches Verzeichnis. Damit kann jeder Kunde seine PHP-Konfiguration individuell einstellen. |
• Wenn im Verzeichnis PHPRC keine Konfigurations-Datei enthalten ist, dann wird diese Anweisung ignoriert. • Wenn sich darin eine Datei php.ini befindet, dann wird damit die PHP-Konfiguration für das betreffende User-Web (inkl. aller Unter-Verzeichnisse) gesteuert. Der Webserver wird so konfiguriert, das jeder Kunde einen eigenen → virtuellen Webserver erhält. Für jeden dieser virtuellen Server wird die Variable PHPRC individuell festgelegt. |
Apache-Modul php5Auf fast allen modernen Apache Webservern wird das Modul php5 geladen, welches einen schnellen PHP Interpreter zur Verfügung stellt.Dieses Modul akzeptiert u.a. folgende Anweisung:
<IfModule mod_php5.c>
Mit Hilfe der Anweisungen php_value, php_flag, php_admin_value,
php_admin_flag kann man jede Variable der PHP-Konfiguration in der
Apache-Konfiguration ändern.php_value display_errors off
<IfModule>
|
Diese Technik wird dann sinnvoll angewendet, wenn man mehrere → virtuelle Webserver betreibt. In diesem Fall gelten die Einstellungen der PHP Konfigurations-Datei php.ini grundsätzlich für alle Webserver. Mit der vorgestellten Technik kann man einzelne PHP-Variable für jeden virtuellen Server abweichend einstellen. Beispiel
In der PHP Konfiguration wird eine strenge Fehler-Meldung eingestellt.
Das ist für eigene Entwicklungen sinnvoll.Zusätzlich wird ein virtueller Webserver definiert, auf welchem Web-Programm-Pakete laufen. In dessen Konfiguration wird die Ausgabe von Fehler-Meldungen abgeschaltet. |
Einzelne Script-ProgrammeUnabhängig von allen anderen Methoden ist es möglich, das Fehler-Verhalten für jedes einzelnen PHP Script-Programm individuell einzustellen.Dazu setzt man z.B. diese PHP-Anweisungen an den Anfang des Quelltextes: ini_set('display_errors','off');
● Die geänderte Konfiguration gilt bis zum Ende des jeweiligen PHP Script-Programms. |
Diese Variante bietet die größte Flexibilität. Sie erlaubt die individuelle Einstellung fast aller PHP Konfigurations-Variablen. Die PHP-Anweisungen müssen allerdings in jedem einzelnen Script-Programm enthalten sein. Die Methode eignet sich daher bestenfalls für einzelne Programme, nicht jedoch für Script-Programm-Pakete von 1000en Dateien. |
Das @-Zeichen unterdrückt Fehler |
|
|
Im Beispiel rechts wird die Funktion mysql_connect
verwendet, um einen Fehler zu provozieren: Es existiert weder der angegebene
Server, noch der User oder das Passwort. Sehen sie rechts die
Live- Hinweis: Je nach Einstellung der → PHP-Konfiguration werden unterschiedliche - allenfalls keine - Fehlermeldungen abgegeben. |
mysql_connect("noserver","nouser","nopswd");
Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'noserver' (1) in /home/topsoft.at/www.topsoft.at/pstrainer/entwicklung/php/error/error.php on line 420 |
|
Wenn man das Zeichen @ vor eine PHP-Funktion setzt,
dann wird die Ausgabe einer allfälligen Fehlermeldung unterbunden. Überprüfen sie in diesem Fall immer das Resultat: (nur) so erfahren sie, ob die Funktion korrekt ausgeführt werden konnte. |
$db = @mysql_connect($server,$user,$pswd);
if($db) {print "connect ok";} else {print "no connect";} |
Die Variable $php_errormsg |
|
|
Die Variable
$php_errormsg speichert die jeweils letzte PHP-Fehlermeldung. Allerdings ist das an die Einstellung der → Konfigurationsdatei gebunden: Rechts die Live- |
track_errors =
track_errors ist abgeschaltet |
| Wenn track_errors eingeschaltet ist, dann können sie die Variable $php_errormsg verwenden, um allfällige Fehler abzufragen: |
Beispiel:
$db = @mysql_connect($server ,$user,$pswd);
$em = $php_errormsg; print "Fehler = $php_errormsg <br />"; |
| Im Beispiel rechts wird ein Fehler provoziert. Falls track_errors aktiviert ist, dann wird die Fehlermeldung abgefangen und angezeigt. |
Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'noserver' (1) in /home/topsoft.at/www.topsoft.at/pstrainer/entwicklung/php/error/error.php on line 504 track_errors ist abgeschaltet. |
|
Letzte Änderung dieser Seite: 2011-11-30 13:04:28
|