Tipps und Tricks » PHP Errorhandling

Weiße Seite oder warum wird kein Fehler angezeigt?

Weil Cracker das Netz unsicher machen, und wir ihnen den Angriff nicht erleichtern wollen, geben wir im laufenden Betrieb Meldungen und Hinweise des PHP Interpreters nicht auf dem Schirm aus. Deshalb zeigen viele Programme in diesem Falle nur eine leere Seite.

Andererseits brauchen wir natürlich derartige Meldungen um eventuellen Fehlern auf die Spur zu kommen. Dazu hat es sich bewährt, Fehlermeldungen und Hinweise in Logdateien zu protokollieren.

Dazu sind einige Einstellungen in der Konfigurationsdatei php.ini vorzunehmen. Beispiel:

display_errors = Off
log_errors = On
error_log = /var/www/files/xtm.shopnix.de-php.log
Der Pfad für error_log muß in einem Verzeichnis innerhalb open_basedir liegen.

Während der Entwicklung, oder wenn der Provider keinen Zugriff auf diese Dateien gewährt, kann man sich im Programm helfen.

Beispiel für den modified eCommerce Shop

Als Beispiel mag der folgende Ausschnitt aus /includes/application_top.php (modified eCommerce, v 1.06) dienen:

 42 /**
43 * set the level of error reporting
44 */
45 if (file_exists(DIR_FS_CATALOG.'export/_error_reporting.all') || file_exists (DIR_FS_CATALOG.'export/_error_reporting.shop')) {
46 @ini_set('display_errors', true);
47 error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT); //exlude E_STRICT on PHP 5 .4
48 } elseif (file_exists(DIR_FS_CATALOG.'export/_error_reporting.dev')) {
49 @ini_set('display_errors', true);
50 error_reporting(-1); // Development value
51 } else {
52 error_reporting(0);

Kurz interpretiert: Wer alle Fehler sehen möchte, lege eine Datei mit dem Namen _error_reporting.all im Verzeichnis export an. Die Datei muss nur vorhanden sein, einen bestimmten Inhalt braucht sie nicht.

Bitte nicht vergessen, die Datei nach der Fehlersuche wieder zu entfernen!

OXID eShop

Der OXID eShop steuert die Ausgaben von Meldungen über eine Variable in der Configuration, der folgende Ausschnitt stammt aus der Community Edition 4.7.0_5440:

 50     //  enable debug mode for template development or bugfixing
51 // -1 = Logger Messages internal use only
52 // 0 = off
53 // 1 = smarty
54 // 2 = SQL
55 // 3 = SQL + smarty
56 // 4 = SQL + smarty + shoptemplate data
57 // 5 = Delivery Cost calculation info
58 // 6 = SMTP Debug Messages
59 // 7 = oxDbDebug SQL parser
60 // 8 = display smarty template names (requires /tmp cleanup)
61 $this->iDebug = 0;

Allgemein

Techniken dieser Art sind auch bei anderen Systemen zu finden. Im Zweifelsfall durchsucht man mit geeigneten Werkzeugen den Quellcode nach dem Begriff "error_reporting). Linux (und alle mir bekannten Unix-Derivate wie z.B. Mac OS X) liefert zu diesem Zweck das Programm grep mit.

Powered by Etomite CMS.