CascadiaPHP 2024

Laufzeit-Konfiguration

Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.

Konfigurationsoptionen für Fehler und Protokollierung
Name Standard Veränderbar Changelog
error_reporting NULL INI_ALL  
display_errors "1" INI_ALL  
display_startup_errors "1" INI_ALL Vor PHP 8.0.0 war der Standardwert "0".
log_errors "0" INI_ALL  
log_errors_max_len "1024" INI_ALL Seit PHP 8.0.0 wirkungslos; entfernt in PHP 8.1.0.
ignore_repeated_errors "0" INI_ALL  
ignore_repeated_source "0" INI_ALL  
report_memleaks "1" INI_ALL  
track_errors "0" INI_ALL Seit PHP 7.2.0 veraltet; entfernt in PHP 8.0.0.
html_errors "1" INI_ALL  
xmlrpc_errors "0" INI_SYSTEM  
xmlrpc_error_number "0" INI_ALL  
docref_root "" INI_ALL  
docref_ext "" INI_ALL  
error_prepend_string NULL INI_ALL  
error_append_string NULL INI_ALL  
error_log NULL INI_ALL  
error_log_mode 0o644 INI_ALL Verfügbar seit PHP 8.2.0
syslog.facility "LOG_USER" INI_SYSTEM Verfügbar seit PHP 7.3.0.
syslog.filter "no-ctrl" INI_ALL Verfügbar seit PHP 7.3.0.
syslog.ident "php" INI_SYSTEM Verfügbar seit PHP 7.3.0.
Weitere Details und die Definitionen der INI_*-Konstanten sind unter Wo Konfigurationseinstellungen gesetzt werden können zu finden.

Hier eine kurze Erklärung der Konfigurationsoptionen:

error_reporting int

Legt die Stufe der Fehlermeldung fest. Der Parameter ist entweder eine Ganzzahl, die ein Bitfeld darstellt, oder eine benannte Konstante. Die Stufen und Konstanten von error_reporting werden in Vordefinierte Konstanten und in der php.ini beschrieben. Mit der Funktion error_reporting() können die Werte zur Laufzeit festgelegt werden. Siehe auch die Direktive display_errors.

Der Standardwert ist E_ALL.

Vor PHP 8.0.0 war der Standardwert E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED. Das bedeutet, dass Fehler der Stufen E_NOTICE, E_STRICT und E_DEPRECATED nicht angezeigt wurden.

Hinweis: PHP-Konstanten außerhalb von PHP

Es ist nicht sinnvoll, PHP-Konstanten außerhalb von PHP, z. B. in der httpd.conf, zu verwenden, weshalb in solchen Fällen die int-Werte benötigt werden. Und weil im Laufe der Zeit weitere Fehlerstufen hinzugefügt werden, wird sich der Maximalwert (für E_ALL) wahrscheinlich ändern. Um also jetzt und auch in Zukunft alle Bitfelder abzudecken, sollte statt E_ALL ein größerer numerischer Wert wie 2147483647 (einschließlich aller Fehler, nicht nur E_ALL) verwendet werden.

display_errors string

Legt fest, ob Fehlermeldungen als Teil der Ausgabe auf dem Bildschirm ausgegeben oder vor dem Benutzer verborgen werden sollen.

Der Wert "stderr" sendet die Fehler an stderr statt an stdout.

Hinweis:

Diese Funktionalität ist für die Entwicklung gedacht und sollte niemals auf Produktionssystemen (z. B. Systemen, die mit dem Internet verbunden sind) verwendet werden.

Hinweis:

Obwohl display_errors zur Laufzeit gesetzt werden kann (mit ini_set()), hat dies keine Auswirkung, wenn das Skript fatale Fehler hat. Dies liegt daran, dass die gewünschte Aktion zur Laufzeit nicht ausgeführt wird.

display_startup_errors bool

Auch wenn display_errors aktiviert ist, werden Fehler, die während des Startvorgangs von PHP auftreten, nicht angezeigt. Es wird dringend empfohlen, display_startup_errors nur für die Fehlersuche zu aktivieren.

log_errors bool

Legt fest, ob vom Skript verursachte Fehlermeldungen im Fehlerprotokoll des Servers oder in error_log protokolliert werden sollen und ist daher serverspezifisch.

Hinweis:

Es wird dringend empfohlen, auf Produktiv-Websites Fehler zu protokollieren, anstatt sie anzuzeigen.

log_errors_max_len int

Legt die maximale Länge von log_errors in Bytes fest. Informationen über die Quelle werden in error_log hinzugefügt. Der Standardwert ist 1024 und der Wert 0 bedeutet, dass die maximale Länge überhaupt nicht angewendet wird. Diese Länge gilt für protokollierte Fehler, angezeigte Fehler und auch für $php_errormsg, aber nicht für explizit aufgerufene Funktionen wie error_log().

Wird ein Wert vom Typ int verwendet, wird dieser Wert in Bytes gemessen. Es kann auch die Kurzschreibweise verwendet werden, wie in dieser FAQ beschrieben.
ignore_repeated_errors bool

Wiederholte Meldungen nicht protokollieren. Wiederholte Fehler müssen in derselben Datei in derselben Zeile auftreten, es sei denn, ignore_repeated_source ist auf true gesetzt.

ignore_repeated_source bool

Die Quelle der Meldung ignorieren, wenn wiederholte Meldungen ignoriert werden. Wenn diese Einstellung auf On gesetzt ist, werden Fehler mit wiederholten Meldungen aus verschiedenen Dateien oder anderen Zeilen des Quellcodes nicht protokolliert.

report_memleaks bool

Wenn dieser Parameter auf On gesetzt ist (die Standardeinstellung), wird ein Bericht über Speicherlecks angezeigt, die vom Zend-Speichermanager entdeckt wurden. Auf Posix-Plattformen wird dieser Bericht an stderr gesendet. Unter Windows wird er mittels OutputDebugString() an den Debugger gesendet und kann mit Tools wie » DbgView angesehen werden. Dieser Parameter ist nur in einem Debug-Build wirksam und nur, wenn E_WARNING in der Liste von error_reporting enthalten ist.

track_errors bool

Wenn diese Option aktiviert ist, wird die letzte Fehlermeldung immer in der Variablen $php_errormsg abgelegt.

html_errors bool

Wenn diese Option aktiviert ist, enthalten die Fehlermeldungen HTML-Tags. Die HTML-Fehlermeldungen sind anklickbar und verweisen auf die jeweilige Seite, auf der der Fehler oder die Funktion, die den Fehler verursacht hat, beschrieben wird. Diese Verweise werden durch docref_root und docref_ext beeinflusst.

Ist diese Option deaktiviert, werden Fehlermeldungen nur als reiner Text angezeigt.

xmlrpc_errors bool

Wenn diese Option aktiviert ist, wird die normale Fehlerberichterstattung deaktiviert und Fehler werden als XML-RPC-Fehlermeldungen formatiert.

xmlrpc_error_number int

Wird als Wert für das XML-RPC-Element faultCode verwendet.

docref_root string

Das neue Format für Fehlermeldungen enthält einen Verweis auf eine Seite, die den Fehler oder die Funktion, die den Fehler verursacht hat, beschreibt. Im Falle von Handbuchseiten kann das Handbuch in der gewünschten Sprache heruntergeladen und diese ini-Direktive auf die URL der lokalen Kopie gesetzt werden. Wenn die lokale Kopie des Handbuchs beispielsweise über "/manual/" erreichbar ist, kann einfach docref_root=/manual/ verwendet werden. Darüber hinaus muss die Direktive docref_ext den Dateierweiterungen der Kopie entsprechend gesetzt werden: docref_ext=.html. Es ist auch möglich, externe Verweise zu verwenden, z. B. docref_root=http://manual/en/ oder docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon&url=http%3A%2F%2Fwww.php.net%2F".

In den meisten Fällen sollte der Wert von docref_root mit einem Schrägstrich "/" enden. Wie das zweite Beispiel oben zeigt, ist dies jedoch nicht zwingend notwendig.

Hinweis:

Dieses Feature ist als Hilfe bei der Entwicklung gedacht, da es das Nachschlagen einer Funktionsbeschreibung erleichtert. Es sollte jedoch niemals auf Produktionssystemen verwendet werden (z. B. auf Systemen, die mit dem Internet verbunden sind).

docref_ext string

Siehe docref_root.

Hinweis:

Der Wert von docref_ext muss mit einem Punkt "." beginnen.

error_prepend_string string

Eine Zeichenkette, die vor einer Fehlermeldung ausgegeben wird; wird nur verwendet, wenn die Fehlermeldung auf dem Bildschirm angezeigt wird. Der Hauptzweck besteht darin, der Fehlermeldung zusätzliches HTML-Markup voranstellen zu können.

error_append_string string

Eine Zeichenkette, die nach einer Fehlermeldung ausgegeben wird; wird nur verwendet, wenn die Fehlermeldung auf dem Bildschirm angezeigt wird. Der Hauptzweck besteht darin, zusätzliches HTML-Markup an die Fehlermeldung anhängen zu können.

error_log string

Der Name der Datei, in der Skriptfehler protokolliert werden sollen. Die Datei muss für den Benutzer des Webservers beschreibbar sein. Wenn der spezielle Wert syslog verwendet wird, werden die Fehler stattdessen an den Systemlogger gesendet. Unter Unix ist dies syslog(3) und unter Windows das Ereignisprotokoll. Siehe auch syslog(). Wenn diese Direktive nicht gesetzt ist, werden Fehler an den SAPI-Fehlerlogger gesendet. Beim Apache ist das z. B. ein Fehlerprotokoll und beim CLI ist es stderr. Siehe auch error_log().

error_log_mode int

Der Dateimodus (Berechtigungen) für die in error_log beschriebene Datei.

syslog.facility string

Gibt an, welche Art von Programm die Meldung protokolliert; nur wirksam, wenn error_log auf "syslog" gesetzt ist.

syslog.filter string

Gibt den Filtertyp an, mit dem die protokollierten Nachrichten gefiltert werden sollen. Erlaubte Zeichen werden unverändert weitergegeben; alle anderen werden in ihrer hexadezimalen Darstellung mit dem Präfix \x geschrieben.

  • all – die protokollierte Zeichenkette wird an Zeilenumbrüchen geteilt und alle Zeichen werden unverändert übgegeben
  • ascii – die protokollierte Zeichenkette wird an Zeilenumbrüchen geteilt und alle nicht druckbaren 7-Bit-ASCII-Zeichen werden maskiert
  • no-ctrl – die protokollierte Zeichenkette wird an Zeilenumbrüchen aufgeteilt und alle nicht druckbaren Zeichen werden maskiert
  • raw – alle Zeichen werden unverändert und ohne Zeilenumbruch an den Systemlogger übergeben (entspricht dem Verhalten vor PHP 7.3)
Diese Einstellung ist nur relevant, wenn error_log auf "syslog" gesetzt ist und wenn syslog() aufgerufen wird.

Hinweis:

Der Filtertyp raw ist seit PHP 7.3.8 und PHP 7.4.0 verfügbar.

Diese Direktive wird unter Windows nicht unterstützt.
syslog.ident string

Gibt die Zeichenkette für die Identifizierung an, die jeder Meldung vorangestellt wird; nur relevant, wenn error_log auf "syslog" gesetzt ist.

add a note

User Contributed Notes 2 notes

up
23
cjakeman at bcs dot org
15 years ago
Using
<?php ini_set('display_errors', 1); ?>
at the top of your script will not catch any parse errors. A missing ")" or ";" will still lead to a blank page.

This is because the entire script is parsed before any of it is executed. If you are unable to change php.ini and set

display_errors On

then there is a possible solution suggested under error_reporting:

<?php
error_reporting
(E_ALL);
ini_set("display_errors", 1);
include(
"file_with_errors.php");
?>


[Modified by moderator]

You should also consider setting error_reporting = -1 in your php.ini and display_errors = On if you are in development mode to see all fatal/parse errors or set error_log to your desired file to log errors instead of display_errors in production (this requires log_errors to be turned on).
up
5
ohcc at 163 dot com
7 years ago
If you set the error_log directive to a relative path, it is a path relative to the document root rather than php's containing folder.
To Top