Andreas Bruns

Softwareentwicklung für Oldenburg und Bremen

Anzeigen von Fehlermeldungen in PHP

Preiswerte Webhosting-Dienste bieten PHP als serverseitige Programmiersprache an, wobei zumeist die eigenen Berechtigungen auf dem Server aus Sicherheitsgründen sehr eingeschränkt werden. Bei dem Anbieter eines Kunden erzeugen Programmfehler des PHP-Codes im Browser nur weiße Seiten ohne Fehlermeldungen und auch Log-Dateien mit den Fehlern sind auf dem Webserver nicht zu finden. Wer dann einen Programmierfehler sucht, sollte zunächst einmal die Einstellungen für das Anzeigen der Fehlermeldungen ändern.

Wenn man in einem PHP-Skript die Funktion ‚phpinfo()‚ aufruft, dann zeigt der Webbrowser die aktuelle PHP-Konfiguration an (das kann der Anbieter auch sperren). Anschließend können die benötigten Einstellungen vorgenommen werden, um PHP bei Fehlern etwas gesprächiger zu machen. Die PHP-Konfiguration kann auf folgende Weisen bei einem Apache-Webserver beeinflusst werden, wobei jede Möglichkeit von dem Webhosting-Anbieter eingschränkt werden kann:

  1. in der globalen PHP-Konfiguration ‚php.ini‚ des Systems
  2. in lokalen PHP-Konfigurationen ‚php.ini‚ innerhalb der Web-Verzeichnisse
  3. in lokalen Apache-Konfigurationen ‚.htaccess‚ innerhalb der Web-Verzeichnisse
  4. in den einzelnen PHP-Skripten

Bei dem Anbieter des Kunden funktionieren die ersten drei Möglichkeit nicht, sodass die Einstellungen direkt in den PHP-Skripten vorgenommen werden müssen. Für einen ersten Test der PHP-Einstellungen habe ich mir das folgende kleine Skript ‚test-config.php‚ erstellt. Hintergrundwissen und Erläuterungen zu den Befehlen gibt es beispielsweise in diesem tollen Blog-Artikel: PHP-Errorlog.

 
<?php
  // alle Fehler anzeigen
  error_reporting(E_ALL);
  // Fehler in der Webseite anzeigen (nicht in Produktion verwenden)
  ini_set('display_errors', 'On');
  // Fehler in Log-Datei schreiben (absolut oder relativ)
  // ini_set('error_log', '/var/www/virtual/meine-domain.de/logs/php-errors.log');
  ini_set('log_errors', 'On');
  ini_set('error_log', 'php-errors.log');
  // falls phpinfo() gesperrt ist, erfolgt mit den Einstellungen wenigstens eine Warnung
  phpinfo();
  // Fehler erzeugen, sodass Log-Datei entsteht
  echo "Jetzt noch einen Fehler provozieren:";
  echo $unbekannteVariable;
  echo unbekannteMethode();
?>

Mit dem aktuell verwendeten Webserver erhalten wir dann diese Ausgabe:

Warning: phpinfo() has been disabled for security reasons in /var/www/virtual/.../htdocs/test-config.php on line 11 
Jetzt noch einen Fehler provozieren: 
Notice: Undefined variable: unbekannteVariable in /var/www/virtual/.../htdocs/test-config.php on line 14 
Fatal error: Call to undefined function unbekannteMethode() in /var/www/virtual/htdocs/test-config.php on line 15 

Falls ein Skript übrigens Syntax-Fehler enthält (im Gegensatz zu Laufzeit-Fehlern), dann kann PHP das gesamte Skript nicht parsen und der Browser wird dann nur eine weiße Seite anzeigen. Dank guter Entwicklungsumgebungen sollte es allerdings gar nicht so weit kommen, dass wir Skripte mit Syntax-Fehlern auf Servern installieren. Eclipse unterstützt PHP mit den PHP Development Tools (PDT) und Jetbrains bietet die IDE PhpStorm sowie das PHP-Plugin für IntelliJ IDEA an.

Syntax-Fehler in IntelliJ IDEA mit PHP-Plugin

Syntax-Fehler in IntelliJ IDEA mit PHP-Plugin

Mit der Methode ‚error-log()‚ kann man dann übrigens Fehlermeldungen entsprechend ausgeben. Sobald ein Skript produktiv geschaltet wird, sollte die Ausgabe von Fehlermeldungen auf der Webseite natürlich mit ‚ini_set('display_errors', 'Off');‚ deaktiviert werden.

Kommentare sind geschlossen.