phpday 2021 digital edition

Beschreibung der php.ini-Direktiven des Sprachkerns

Diese Liste enthält die php.ini-Direktiven des PHP-Kerns, die Sie in Ihrer Installation verwenden können. Direktiven, die von einer der Erweiterungen verarbeitet werden, werden in den Handbuchseiten der jeweiligen Erweiterung aufgelistet und im Detail beschrieben. So können z.B. die Direktiven zur Konfiguration von Sessions auf den Session-Handbuchseiten gefunden werden.

Hinweis:

Die Voreinstellungen, die hier aufgeführt werden, gelten, wenn php.ini nicht geladen wurde. Die Werte für die Produktions- und Entwicklungs-php.ini können unterschiedlich sein.

Sprachoptionen

Konfiguration der Sprache und verschiedene weitere Optionen
Name Standard Veränderbar Changelog
short_open_tag "1" PHP_INI_PERDIR  
precision "14" PHP_INI_ALL  
serialize_precision "-1" PHP_INI_ALL Vor PHP 7.1.0 war der Vorgabewert 17.
disable_functions "" Nur PHP_INI_SYSTEM  
disable_classes "" Nur php.ini  
exit_on_timeout "" PHP_INI_ALL  
expose_php "1" Nur php.ini  
hard_timeout "2" PHP_INI_SYSTEM Verfügbar seit PHP 7.1.0.
zend.exception_ignore_args "0" PHP_INI_ALL Verfügbar seit PHP 7.4.0
zend.multibyte "0" PHP_INI_ALL  
zend.script_encoding NULL PHP_INI_ALL  
zend.detect_unicode NULL PHP_INI_ALL  
zend.signal_check "0" PHP_INI_SYSTEM  
zend.assertions "1" PHP_INI_ALL mit Einschränkungen

Hier eine kurze Erklärung der Konfigurationsoptionen:

short_open_tag bool

Bestimmt, ob die Kurzform (<? ?>) des PHP-Öffnungs-Tags erlaubt werden soll. Wenn Sie PHP in Kombination mit XML verwenden wollen, dann deaktivieren Sie diese Option, um <?xml ?> verwenden zu können. Anderenfalls können Sie das Tag mit PHP ausgeben, z.B. <?php echo '<?xml version="1.0"'; ?>. Wenn diese Option deaktiviert ist, müssen Sie die Langform des PHP-Öffnungs-Tags (<?php ?>) verwenden.

Hinweis:

Diese Option hat keinen Einfluss auf die Kurzform <?=, die immer verfügbar ist.

precision int
Die Anzahl der signifikanten Stellen, die in Gleitkommazahlen dargestellt werden. -1 bedeutet, dass ein verbesserter Algorithmus zur Rundung solcher Zahlen verwendet wird.
serialize_precision int
Die Anzahl der signifikanten Stellen, die gespeichert werden wenn Gleitkommazahlen serialisiert werden. -1 bedeutet, dass ein verbesserter Algorithmus zur Rundung solcher Zahlen verwendet wird.
expose_php bool

Zeigt der Welt, dass PHP auf dem Server installiert ist. Dies beinhaltet die Version von PHP im HTTP-Header (z. B. X-Powered-By: PHP/5.3.7).

disable_functions string

Diese Direktive ermöglicht das Deaktivieren einzelner Funktionen. Die Funktionen werden als kommagetrennte Liste von Funktionsnamen übergeben.

Nur interne Funktionen können über diese Direktive deaktiviert werden. Benutzerdefinierte Funktionen sind nicht betroffen.

Diese Direktive muss in der php.ini gesetzt werden. Sie kann beispielsweise nicht in der httpd.conf gesetzt werden.

disable_classes string
Diese Direktive ermöglicht das Deaktivieren einzelner Klassen. Die Funktionen werden als kommagetrennte Liste von Klassennamen übergeben. Diese Direktive muss der in php.ini gesetzt werden. Sie kann beispielsweise nicht der in httpd.conf gesetzt werden.
zend.assertions int
Falls diese Direktive auf 1 gesetzt ist, dann wird Assertion-Code erzeugt und ausgeführt (Entwicklungsmodus). Falls sie auf 0 gesetzt ist, dann wird Assertion-Code erzeugt, aber zur Laufzeit ausgelassen (nicht ausgeführt). Falls sie auf -1 gesetzt ist, dann wird Assertion-Code nicht erzeugt, so dass die Assertions keine Laufzeitkosten haben (Produktionsmodus).

Hinweis:

Wurde der Prozess im Produktionsmodus gestartet, kann zend.assertions nicht zur Laufzeit geändert werden, da der Assertion-Code nicht erzeugt wurde.

Wurde der Prozess im Entwicklungsmodus gestartet, kann zend.assertions zur Laufzeit nicht auf -1 gesetzt werden.

hard_timeout int

Wenn der in max_execution_time eingestellte Timeout erreicht wurde, baut die PHP-Laufzeitumgebung die Ressourcen geordnet ab. Wird dabei etwas blockiert, läuft der harte Timeout für die eingestellte Anzahl von Sekunden. Wenn der harte Timeout erreicht ist, wird PHP unvorschriftsmäßig beendet. Bei einem Wert von 0 wird der harte Timeout nie aktiviert.

Wenn PHP nach einem harten Timeout beendet wird, sieht das in etwa so aus:

Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unknown on line 0

zend.exception_ignore_args bool

Schließt Argumente aus Stack-Traces, die von Exceptions generiert wurden, aus.

zend.multibyte bool

Erlaubt das Parsen von Quellcode-Dateien in Multibyte-Encodings. Die Aktivierung von zend.multibyte ist erforderlich, um Zeichenkodierungen wie SJIS, BIG5, usw. zu verwenden, die besondere Zeichen in multibyte-Zeichenkettendaten enthalten. ISO-8859-1-kompatible Kodierungen wie UTF-8, EUC, usw. erfordern diese Option nicht.

Das Aktivieren von zend.multibyte erfordert, dass die mbstring-Erweiterung verfügbar ist.

zend.script_encoding string

Dieser Wert wird verwendet, sofern keine declare(encoding=...)-Direktive am Anfang des Skriptes verwendet wird. Wird eine ISO-8859-1-inkompatible Kodierung verwendet, müssen sowohl zend.multibyte als auch zend.script_encoding verwendet werden.

Zeichenkettenliterale werden von zend.script_encoding in mbstring.internal_encoding übersetzt, als ob mb_convert_encoding() aufgerufen worden wäre.

zend.detect_unicode bool

Erkenne, ob eine BOM (Byte Order Mark) vorhanden ist und prüfe, ob die Datei valide Multibyte Zeichen enthält. Diese Erkennung wird vorgenommen, bevor __halt_compiler() verarbeitet wird. Diese Option ist nur im Zend Multibyte Modus verfügbar.

zend.signal_check bool

Legt fest, ob während des Herunterfahrens geprüft werden soll, ob Signal-Handler ersetzt wurden.

exit_on_timeout bool

Diese Einstellung betrifft nur Apache1 mit mod_php. Sie zwingt einen Apache-Kindprozess sich zu beenden, wenn ein PHP-Timeout auftritt. Solch ein Timeout verursacht einen internen longjmp()-Aufruf, welches einige Erweiterungen in einem inkonsistenten Zustand hinterlassen kann. Durch das Beenden des Prozesses werden ausstehende Locks und allozierter Arbeitsspeicher freigegeben.

Limitierung von Ressourcen

Limitierung von Ressourcen
Name Standard Veränderbar Changelog
memory_limit "128M" PHP_INI_ALL  

Hier eine kurze Erklärung der Konfigurationsoptionen:

memory_limit int

Legt maximale Menge an Speicher in Bytes fest, die ein Skript verbrauchen darf. Damit können schlecht geschriebene Skripte daran gehindert werden, den gesamten verfügbaren Speicher eines Servers "aufzufressen". Um keine Speicherobergrenze festzulegen, setzen Sie diese Direktive auf den Wert -1.

Wird ein int-Wert verwendet, wird dieser Wert in Bytes gemessen. Sie können auch die Kurzschreibweise verwenden, wie in dieser FAQ beschrieben.

Siehe auch: max_execution_time.

Leistungsoptimierung

Leistungsoptimierung
Name Standard Veränderbar Changelog
realpath_cache_size "4M" PHP_INI_SYSTEM Vor PHP 7.0.16 and 7.1.2 war die Voreinstellung "16K"
realpath_cache_ttl "120" PHP_INI_SYSTEM  

Hinweis:

Die Verwendung von open_basedir deaktiviert den realpath-Cache.

Hier eine kurze Erklärung der Konfigurationsoptionen:

realpath_cache_size int

Legt die Größe des von PHP nutzbaren realpath-Caches fest. Dieser Wert sollte auf Systemen erhöht werden, auf denen PHP viele Dateien öffnet, um die Anzahl von Dateioperationen widerzuspiegeln.

Die Größe stellt die Gesamtzahl von Bytes der gespeicherten Pfad-Zeichenketten dar, plus die Größe der Daten, die mit dem Cache-Eintrag verknüpft sind. Das bedeutet, dass der Cache größer sein muss, um längere Pfade im Cache zu speichern. Dieser Wert steuert nicht direkt die Anzahl der individuellen Pfade, die im Cache vorgehalten werden können.

Die benötigte Größe für die Cache-Eintragsdaten ist systemabhängig.

realpath_cache_ttl int

Zeitspanne (in Sekunden), während der realpath-Informationen einer Datei oder eines Verzeichnisses gecacht bleiben. Für Systeme, auf denen sich die Dateien kaum ändern, sollte man die Erhöhung dieses Wertes in Betracht ziehen.

Verarbeitung von Daten

Konfigurations-Optionen für die Verarbeitung von Daten
Name Standard Veränderbar Changelog
arg_separator.output "&" PHP_INI_ALL  
arg_separator.input "&" PHP_INI_PERDIR  
variables_order "EGPCS" PHP_INI_PERDIR  
request_order "" PHP_INI_PERDIR  
auto_globals_jit "1" PHP_INI_PERDIR  
register_argc_argv "1" PHP_INI_PERDIR  
enable_post_data_reading "1" PHP_INI_PERDIR  
post_max_size "8M" PHP_INI_PERDIR  
auto_prepend_file NULL PHP_INI_PERDIR  
auto_append_file NULL PHP_INI_PERDIR  
default_mimetype "text/html" PHP_INI_ALL  
default_charset "UTF-8" PHP_INI_ALL  
input_encoding "" PHP_INI_ALL  
output_encoding "" PHP_INI_ALL  
internal_encoding "" PHP_INI_ALL  

Hier eine kurze Erklärung der Konfigurationsoptionen:

arg_separator.output string

Das Trennzeichen, das in von PHP generierten URLs verwendet wird, um Argumente abzutrennen.

arg_separator.input string

Liste der Trennzeichen, die von PHP beim Parsen von URLs zu Variablen verwendet werden.

Hinweis:

Jeder Buchstabe in dieser Option wird als Trennzeichen interpretiert!

variables_order string

Legt die Reihenfolge der EGPCS- (Environment (Umgebungsvariablen), Get, Post, Cookie und Server) Variablenverarbeitung fest. Wenn zum Beispiel variables_order auf "SP" eingestellt ist, wird PHP die superglobals $_SERVER und $_POST, nicht aber $_ENV, $_GET und $_COOKIE anlegen. Wird dieser Wert auf "" gesetzt, so werden keine superglobals erzeugt.

Warnung

Sowohl im CGI- als auch im FastCGI-SAPI enthält $_SERVER immer auch Variablen aus dem Environment; S ist hier immer äquivalent zu ES, unabhängig davon, ob E noch anderweitig in der Direktive verwendet wird.

Hinweis:

Der Inhalt und die Reihenfolge von $_REQUEST sind von dieser Direktive ebenfalls betroffen.

request_order string

Diese Direktive legt fest, in welcher Reihenfolge PHP GET-, POST- und Cookie-Variablen im _REQUEST-Array ablegt. Die Registrierung erfolgt dabei von links nach rechts und neuere Einträge überschreiben bisherige Werte gleichen Namens.

Ist diese Direktive nicht gesetzt, so wird stattdessen variables_order für die Inhalte von $_REQUEST ausgewertet.

Beachten Sie, dass die Standard-php.ini-Dateien 'C' für Cookies aus Sicherheitsgründen nicht angeben.

auto_globals_jit bool

Wenn eingeschaltet, werden die SERVER-, REQUEST- und ENV-Variablen erzeugt, sobald diese zum ersten Mal verwendet werden (Just In Time), statt zum Ausführungsbeginn des Skriptes. Wenn diese Variablen in einem Skript nicht verwendet werden, bringt das Einschalten dieser Einstellung einen Geschwindigkeitszuwachs.

Warnung

Ob SERVER-, REQUEST- und ENV-Variablen verwendet werden, wird bereits zur Kompilationszeit geprüft. Ein Zugriff über variable Variablen führt daher nicht dazu, dass diese initialisiert werden.

register_argc_argv bool
Bestimmt, ob die argv- & argc-Variablen deklariert werden sollen (betrifft die GET-Informationen). Siehe auch Kommandozeile.
enable_post_data_reading bool
Wenn diese Option deaktiviert ist, werden $_POST und $_FILES nicht gefüllt. Der einzige Weg, in diesem Fall die POST-Daten zu lesen, ist der php://input-Stream-Wrapper. Dies kann nützlich sein, um Requests umzuleiten oder um die POST-Daten speichereffizient zu verarbeiten.
post_max_size int
Setzt die maximal erlaubte Größe von POST-Daten. Diese Option betrifft auch den Datei-Upload. Um größere Dateien hochzuladen, muss der Wert größer sein als upload_max_filesize. Allgemein sollte memory_limit größer als post_max_size sein. Wird ein int-Wert verwendet, wird dieser Wert in Bytes gemessen. Sie können auch die Kurzschreibweise verwenden, wie in dieser FAQ beschrieben. Wenn die Größe der POST-Daten größer ist als post_max_size, werden die $_POST- und $_FILES-Superglobals leer sein. Dies kann auf verschiedene Weisen verfolgt werden, z.B. indem man die $_GET-Variable an das Skript, das die Daten verarbeitet, weitergibt, d.h. <form action="edit.php?processed=1"> und daraufhin prüft, ob $_GET['processed'] gesetzt ist.

Hinweis:

PHP gestattet die Angabe von K für kilo, M für mega und G für Giga bei der Angabe von Werten und rechnet diese automatisch um. Vermeiden Sie aber beim Einsatz von 32bit-Versionen die Angabe von Werten, die das Limit für vorzeichenbehaftete 32bit-Integer überschreiten, da Ihre Skripte sonst fehlschlagen werden.

Changelog für post_max_size
Version Beschreibung
5.3.4 post_max_size = 0 deaktiviert die Begrenzung nicht, wenn der Content-Type application/x-www-form-urlencoded oder PHP nicht bekannt ist.
5.3.2, 5.2.12 Erlaubt unbegrenzte POST-Größe durch Setzen von post_max_size auf 0.

auto_prepend_file string

Hier können Sie eine Datei angeben, die automatisch vor der Hauptdatei aufgerufen wird. Die Datei wird in die aufgerufene Datei eingebettet, als wenn Sie sie mittels der Funktion require eingebunden hätten, dabei wird ein gesetzter include_path beachtet.

Der spezielle Wert none deaktiviert Auto-Prepending.

auto_append_file string

Hier können Sie eine Datei angeben, die automatisch nach der Hauptdatei aufgerufen wird. Die Datei wird in die aufgerufene Datei eingebettet, als wenn Sie sie mittels der Funktion require eingebunden hätten, dabei wird ein gesetzter include_path beachtet.

Der spezielle Wert none deaktiviert Auto-Appending.

Hinweis: Wird das Skript mit der Funktion exit() beendet, dann wird Auto-Appending nicht aktiv.

default_mimetype string

Standardmäßig gibt PHP den Medientyp unter Verwendung des Content-Type-Headers aus. Um das zu unterbinden, ist diese Einstellung leer zu lassen.

PHP's eingebauter Medientyp ist text/html.

default_charset string

"UTF-8" ist der Vorgabewert und dieser Wert wird als Standard-Zeichenkodierung für htmlentities(), html_entity_decode() und htmlspecialchars() verwendet, wenn der Parameter encoding ausgelassen wird. Der Wert von default_charset wird ebenfalls verwendet, um den Standard-Zeichensatz für iconv-Funktionen festzulegen, wenn die iconv.input_encoding-, iconv.output_encoding- und iconv.internal_encoding-Konfigurationsoptionen nicht gesetzt sind, und für mbstring-Funktionen, wenn die mbstring.http_input-, mbstring.http_output- und mbstring.internal_encoding-Konfigurationsoptionen nicht gesetzt sind.

Alle Versionen von PHP verwenden diesen Wert als Zeichensatz im Standard-Content-Type-Header, der von PHP gesendet wird, wenn der Header nicht durch einen Aufruf von header() überschrieben wurde.

default_charset auf einen leeren Wert zu setzen, wird nicht empfohlen.

input_encoding string

Diese Einstellung wird für Multibyte-Module wie mbstring und iconv verwenden. Standardwert ist leer.

output_encoding string

Diese Einstellung wird für Multibyte-Module wie mbstring und iconv verwenden. Standardwert ist leer.

internal_encoding string

Diese Einstellung wird für Multibyte-Module wie mbstring und iconv verwenden. Standardwert ist leer. Falls leer, dann wird default_charset verwendet.

Siehe auch magic_quotes_gpc, magic-quotes-runtime und magic_quotes_sybase.

Pfade und Verzeichnisse

Konfigurationsoptionen für Pfade und Verzeichnisse
Name Standard Veränderbar Changelog
include_path ".;/path/to/php/pear" PHP_INI_ALL  
open_basedir NULL PHP_INI_ALL  
doc_root NULL PHP_INI_SYSTEM  
user_dir NULL PHP_INI_SYSTEM  
user_ini.cache_ttl "300" PHP_INI_SYSTEM  
user_ini.filename ".user.ini" PHP_INI_SYSTEM  
extension_dir "/path/to/php" PHP_INI_SYSTEM  
extension NULL Nur php.ini  
zend_extension NULL Nur php.ini  
cgi.check_shebang_line "1" PHP_INI_SYSTEM  
cgi.discard_path "0" PHP_INI_SYSTEM  
cgi.fix_pathinfo "1" PHP_INI_SYSTEM  
cgi.force_redirect "1" PHP_INI_SYSTEM  
cgi.nph "0" PHP_INI_SYSTEM  
cgi.redirect_status_env NULL PHP_INI_SYSTEM  
cgi.rfc2616_headers "0" PHP_INI_ALL  
fastcgi.impersonate "0" PHP_INI_SYSTEM  
fastcgi.logging "1" PHP_INI_SYSTEM  

Hier eine kurze Erklärung der Konfigurationsoptionen:

include_path string

Hier können Sie eine Liste von Verzeichnissen angeben, in welchen die Funktionen require, include, fopen(), file(), readfile() und file_get_contents() nach Dateien suchen. Das Format ist ähnlich zur PATH-Umgebungsvariablen des jeweiligen Systems: Eine Liste von Verzeichnissen, getrennt durch einen Doppelpunkt unter Unix oder ein Semikolon unter Windows.

Wenn PHP eine Datei einbinden soll, geht es alle Einträge im Include-Pfad einzeln durch. Zuerst wird der erste Pfad getestet und wenn die Datei dort nicht gefunden wird, wird der nächste Pfad überprüft, bis letztendlich entweder die Datei gefunden wird oder aber PHP ein E_WARNING oder E_ERROR zurückgibt. Der Include-Pfad kann auch zur Laufzeit mit Hilfe der Funktion set_include_path() geändert werden.

Beispiel #1 include_path unter Unix

include_path=".:/php/includes"

Beispiel #2 include_path unter Windows

include_path=".;c:\php\includes"

Ein . in dieser Option ermöglicht, Dateien relativ zum aktuellen Verzeichnis einzubinden. Es ist jedoch effizienter, explizit include './Datei' zu schreiben, anstatt PHP zu zwingen jedes Mal den Include-Pfad zu nutzen.

Hinweis:

Auf ENV kann in .ini-Dateien ebenfalls zugegriffen werden. Daher ist es möglich, das Home-Verzeichnis durch ${LOGIN} und ${USER} zu referenzieren.

Umgebungsvariablen können zwischen verschiedenen Server APIs variieren, da diese Umgebungen unterschiedlich sein können.

Beispiel #3 include_path unter Unix unter Verwendung der ${USER}-Umgebungsvariablen

include_path = ".:${USER}/pear/php"

open_basedir string

Begrenzt die Dateien, auf die von PHP zugegriffen werden kann, auf einen bestimmten Ordner inklusive seiner Unterordner. Diese Direktive ist wirksam, EGAL, ob Safe Mode an oder aus ist.

Wenn ein Skript versucht, auf eine Datei zuzugreifen, zum Beispiel mit include oder fopen(), wird der Ort der Datei geprüft. Wenn die Datei nicht im Verzeichnisbaum liegt, der in open_basedir angegeben ist, wird PHP nicht auf die Datei zugreifen. Alle symbolischen Verknüpfungen werden aufgelöst, sodass es nicht möglich ist, diese Beschränkung mit einem Symlink zu umgehen. Wenn die Datei nicht existiert, kann die Verknüpfung nicht aufgelöst werden und der Dateiname wird mit (einem aufgelösten) open_basedir verglichen.

open_basedir kann sich auf mehr als nur Dateisystemfunktionen auswirken; zum Beispiel ist, wenn MySQL konfiguriert ist, den mysqlnd-Treiber zu verwenden, LOAD DATA INFILE von open_basedir betroffen. Ein Großteil der erweiterten Funktionalität von PHP verwendet open_basedir auf diese Weise.

Der spezielle Wert . gibt an, dass das Arbeitsverzeichnes des Skriptes das Basis-Verzeichnis ist. Dies ist gefährtlich, da das Arbeitsverzeichnis mit chdir() einfach geändert werden kann.

In der Konfigurationsdatei httpd.conf kann open_basedir genau wie jede andere Direktive mit "php_admin_value open_basedir none" geändert oder deaktiviert werden (z.B. für einige virtuelle Hosts).

Unter Windows müssen die Verzeichnisse mit einem Semikolon (;) getrennt werden, auf allen anderen Systemen mit einem Doppelpunkt. Wenn PHP als Apache-Modul läuft, erbt open_basedir seinen Pfad nun automatisch von übergeordneten Verzeichnissen.

Die mit open_basedir angegebene Einschränkung ist ein Verzeichnisname, kein Präfix.

Standardmäßig dürfen alle Dateien geöffnet werden.

Hinweis:

open_basedir kann zur Laufzeit weiter eingeschränkt werden. Das heißt, wenn open_basedir laut php.ini auf /www/ gesetzt ist, kann die Direktive zur Laufzeit mit ini_set() auf beispielsweise /www/tmp/ weiter begrenzt werden. Wenn mehrere Verzeichnisse aufgelistet werden, kann die PATH_SEPARATOR-Konstante als vom Betriebssystem unabhängiges Trennzeichen verwendet werden.

Hinweis:

Die Verwendung von open_basedir setzt realpath_cache_size auf 0 und deaktiviert somit den realpath-Cache.

doc_root string

Hier wird das Stammverzeichnis der PHP-Skripte angegeben. Diese Option wird nur verwendet, wenn ein Wert angegeben wird. Wenn PHP nicht mit FORCE_REDIRECT kompiliert wurde, sollten Sie doc_root setzen, wenn Sie PHP als CGI-Version laufen lassen (betrifft alle Webserver außer IIS). Die Alternative ist, die Option cgi.force_redirect zu verwenden.

user_ini.cache_ttl int

user_ini.filename string

user_dir string

Der Basisname des Verzeichnisses, das für Benutzer-Verzeichnisse mit PHP-Dateien verwendet wird, z.B. public_html.

extension_dir string

Das Verzeichnis, in dem PHP dynamisch zu ladende Erweiterungen findet. Siehe auch enable_dl und dl().

extension string

Dynamisch zu ladende Erweiterungen, die geladen werden sollen, wenn PHP gestartet wird.

zend_extension string

Der Name einer dynamisch ladbaren Zend-Erweiterung (beispielsweise Xdebug), welche geladen werden soll, wenn PHP startet.

cgi.check_shebang_line bool

Kontrolliert, ob die CGI-Version von PHP nach einer Zeile, die mit #! (Shebang) beginnt, am Anfang des auszuführenden Skriptes sucht. Diese Zeile könnte notwendig sein, wenn das Skript sowohl die eigenständige Ausführung als auch die mittels PHP-CGI unterstützt. PHP überspringt diese Zeile im CGI-Modus und ignoriert ihren Inhalt, wenn diese Direktive eingeschaltet ist.

cgi.discard_path bool

Ist dies aktiviert, kann das PHP-CGI-Binary sicher außerhalb des Web-Wurzelverzeichnisses abgelegt werden, ohne das jemand in der Lage ist, die .htaccess-Sicherheit zu umgehen.

cgi.fix_pathinfo bool

Stellt reale PATH_INFO/PATH_TRANSLATED-Informationen für CGI zur Verfügung. Das frühere Verhalten von PHP war, PATH_TRANSLATED einfach auf SCRIPT_FILENAME zu setzen und nicht auf PATH_INFO. Für weitere Informationen zu PATH_INFO siehe die CGI-Spezifikation. Wenn Sie diesen Wert auf 1 setzen, hat dies zur Folge, dass PHP-CGI seine Pfade entsprechend der Spezifikation anpasst. Bei einem Wert von Null verhält sich PHP entsprechend den früheren Versionen. Standardmäßig ist es eingeschaltet. Es wird empfohlen, Ihre Skripte dahingehend anzupassen, statt PATH_TRANSLATED SCRIPT_FILENAME zu verwenden.

cgi.force_redirect bool

Wenn PHP als CGI-Version läuft, wird cgi.force_redirect unter den meisten Webservern benötigt, um Sicherheit zu garantieren. Wenn diese Option nicht angegeben wird, setzt PHP sie standardmäßig auf "on". Auf Ihre eigene Gefahr hin können Sie dies ausschalten ("off").

Hinweis:

Windows-Benutzer: Unter IIS muss diese Option ausgeschaltet werden. Für OmniHTTPD und Xitami gilt selbiges.

cgi.nph bool

Ist cgi.nph aktiviert, zwingt es CGI immer, Status: 200 für jede Anfrage zu senden.

cgi.redirect_status_env string

Wenn cgi.force_redirect eingeschaltet ist und Sie nicht den Apache- oder Netscape-Webserver (iPlanet) verwenden, müssen Sie eventuell eine Umgebungsvariable setzen, damit PHP weiß, ob es die Ausführung fortführen darf.

Hinweis:

Das Setzen dieser Variablen kann Sicherheitsrisiken verursachen, Sie sollten also genau wissen, was Sie tun.

cgi.rfc2616_headers int

Bestimmt, welcher Typ von Headern verwendet werden soll, wenn HTTP-Antwortcodes gesendet werden. Wenn diese Option auf 0 gesetzt ist, sendet PHP einen » RFC 3875-"Status:"-Header, der von Apache und anderen Webservern unterstützt wird. Ist sie auf 1 gesetzt, sendet PHP einen zu » RFC 2616 konformen Header.

Ist diese Option aktiviert, und Sie führen PHP in einer CGI-Umgebung (z.B. PHP-FPM) aus, sollten Sie keine üblichen RFC 2616 HTTP Status-Response-Header verwenden; stattdessen sollten Sie ihre RFC 3875-Pendants nutzen, z.B. sollten Sie anstelle von header("HTTP/1.0 404 Not found"); header("Status: 404 Not Found"); verwenden.

Wenn Sie diese Option nicht verstehen, lassen Sie den Wert auf 0.

fastcgi.impersonate string

FastCGI unter IIS (auf WINNT-basierten Betriebssystemen) unterstützt die Möglichkeit, Sicherheitsmerkmale des aufrufenden Clients zu bestimmen. Dies ermöglicht es IIS, den Sicherheitskontext zu bestimmen, in dem der Zugriff läuft. mod_fastcgi unter Apache unterstützt zur Zeit diese Funktion nicht (17.03.2002). Setzen Sie diese Option auf 1, wenn Sie IIS verwenden. Der Standardwert ist 0.

fastcgi.logging bool

Schaltet SAPI-Logging an, wenn FastCGI verwendet wird. Standardmäßig ist Logging aktiviert.

Datei-Uploads

Konfigurationsoptionen für Datei-Uploads
Name Standard Veränderbar Changelog
file_uploads "1" PHP_INI_SYSTEM  
upload_tmp_dir NULL PHP_INI_SYSTEM  
max_input_nesting_level 64 PHP_INI_PERDIR  
max_input_vars 1000 PHP_INI_PERDIR  
upload_max_filesize "2M" PHP_INI_PERDIR  
max_file_uploads 20 PHP_INI_SYSTEM  

Hier eine kurze Erklärung der Konfigurationsoptionen:

file_uploads bool

Bestimmt, ob Datei-Uploads per HTTP erlaubt sind. Siehe auch die Optionen upload_max_filesize, upload_tmp_dir und post_max_size.

upload_tmp_dir string

Das temporäre Verzeichnis, in dem Dateien während des Uploads gespeichert werden. Für dieses Verzeichnis muss der Benutzer, unter dem PHP läuft, Schreibberechtigung haben. Wenn hier nichts angeben wird, verwendet PHP das Standardverzeichnis für temporäre Dateien auf Ihrem System.

Wenn das hier angegebene Verzeichnis nicht beschreibbar ist, nutzt PHP stattdessen das Standardverzeichnis für temporöre Dateien. Wenn open_basedir genutzt wird, muss dieses Standardverzeichnis erlaubt sein, ansonsten schlagen Uploads fehl.

upload_max_filesize int

Die Maximale Größe, die eine hochgeladene Datei haben darf.

Wird ein int-Wert verwendet, wird dieser Wert in Bytes gemessen. Sie können auch die Kurzschreibweise verwenden, wie in dieser FAQ beschrieben.
max_file_uploads int

Die maximale Anzahl an Dateien, die gleichzeitig hochgeladen werden kann. Seit PHP 5.3.4 zählen Upload-Formularfelder, die leer gelassen wurden nicht mehr zu diesem Limit.

Allgemeines SQL

Konfigurationsoptionen für allgemeines SQL
Name Standard Veränderbar Changelog
sql.safe_mode "0" PHP_INI_SYSTEM Entfernt in PHP 7.2.0

Hier eine kurze Erklärung der Konfigurationsoptionen:

sql.safe_mode bool

Wenn diese Option eingeschaltet wird, werden Datenbankverbindungsfunktionen, die Standardwerte vorgeben, diese Werte anstelle der angegebenen Parameter verwenden. Zu Informationen über Standardwerte können Sie einen Blick auf die Dokumentation der Verbindungsfunktionen der relevanten Datenbank werfen.

Warnung

Dieses Feature wurde von PHP 7.2.0 an ENTFERNT.

Windows-spezifisch

Windows-spezifische Optionen
Name Standard Veränderbar Changelog
windows.show_crt_warning "0" PHP_INI_ALL  

Hier eine kurze Erklärung der Konfigurationsoptionen:

windows.show_crt_warning bool

Wenn diese Direktive angeschaltet ist, werden Windows CRT Warnings angezeigt.

add a note add a note

User Contributed Notes 20 notes

up
20
csg at DEL_THISdiatom dot de
15 years ago
Starting with PHP 4.4.0 (at least PHP version 4.3.10 did have old, documented behaviour) interpretation of value of "session.save_path" did change in conjunction with "save_mode" and "open_basedir" enabled.

Documented ( http://de.php.net/manual/en/ref.session.php#ini.session.save-path ):
  Values of "session.save_path" should or may be  **without**  ending slash.
  For instance:
<?php
 
// Valid only  *before* PHP 4.4.0:
 
ini_set( "session.save_path", "/var/httpd/kunde/phptmp" );
?> will mean:
  The directory "/var/httpd/kunde/phptmp/" will be used to write data and therefore must be writable by the web server.

Starting with PHP 4.4.0 the server complains that "/var/httpd/kunde/" is not writable.
Solution: Add an ending slash in call of ini_set (or probably whereever you set "session.save_path"), e.g.:
<?php
 
// Note the slash on ".....phptmp/":
 
ini_set( "session.save_path", "/var/httpd/kunde/phptmp/" );
?>

Hope, that does help someone.
up
2
Anton Bannikov
1 year ago
I had a problem with 'open_basedir =' string in php.ini. This string was writtren in VirtualHost Directory directive of Apache2 and successfully rewrote the same php.ini setting! It happened with VestaCP, but I think, it's a common way. Goog luck!
up
1
luisdev
1 year ago
https://haydenjames.io/understanding-php-memory_limit/ explains the memory_limit setting nicely.
up
2
Simone Pellegatta
3 months ago
Be careful while using auto_prepend_file.

When the custom exception handler, set by set_exception_handler(), handles an uncaught exception, it interrupts the execution of every script.

If the script with the unhandled exception has been automatically prepended or included by an automatically prepended script, however, the main script will continue running anyway.

This could cause several issues: when we think that throwing an exception would automatically interrupt the current application, a whole chunk of code is going to run anyway.
up
2
rlammers at linuxmail dot org
10 years ago
This is a possible solution for a problem which seems to be a php-ini-problem but is not.

If a $_POST is used with large fields e.g. textarea's with more than 120kb characters php returns a blank screen, even if the max_post_size is 8M.

This problem may be caused by an apache-module SecFilter.

Adding the following lines to the .htaccess solves the problem.
SecFilterEngine Off
SecFilterScanPOST Off

I know this is not a php-issue, but i'm still posting it here since it looks like it is a php-problem and I did not find any sites or forums offering this solution.
up
0
andre dot wetter at myelco dot ch
30 days ago
If you use Microsoft IIS Windows and want to use open_basedir restrictions with multiple dirs you have to set them into single quotes in the main config xml file of IIS (C:\Windows\System32\inetsrv\config\applicationHost.config). Works fine in IIS 10.

Multiple files with single quotes and ; for windows:
"C:\php\php-cgi.exe|-d open_basedir='C:\Windows\Temp\;D:\mywebsite1\'"

Only one dir works fine without single quotes:
"C:\php\php-cgi.exe|-d open_basedir=D:\mywebsite1\"

In my main config xml file of IIS there are 2 nodes to set per website and the definitions have to be equal:
configuration\Location\system.webServer\handlers\add
configuration\system.webServer\fastCgi
up
0
fernandobasso dot br at gmail dot com
4 years ago
This might help in case someone happens to maintain old applications with a charset other than utf-8.

According to the docs, you can override the default charset if you use `header()`.

Suppose php.ini sets the default_charset to "UTF-8", but you need a legacy charset, like ISO-8859-1.

Still,

<?php header('Content-Type: text/html; Charset=ISO-8859-1'); ?>

would not override the charset, just add it as well and the result
was a response header like (note the two charsets):

    Content-Type:"text/html; Charset=ISO-8859-1;charset=UTF-8"

I found it strange the default one as `charset` with a lowercase `c`
as opposed to my custom charset with an uppercase `C`.

What solved was to _override_ the charset using all lowercase letters
as well for the word “charset”:

<?php header('content-type: text/html; charset=ISO-8859-1'); ?>

Then, the double charset from the response headers disappeared, and only the single, custom charset remained.
up
-1
dougal at gunters dot org
5 years ago
It appears that if you use both the 'include_path' directives and 'open_basedir', that file searches will hit the include path *first*, before local files. But if 'open_basedir' is not in use, then local files are found first. For example, suppose you have code in '/var/www/myfile.php' which does:

<?php
 
require_once('config.php');
?>

Further, assume that there is a local file '/var/www/config.php', and there is also a file '/var/local/php/config.php'.

Next, if your php.ini has:

  include_path = /var/local/php/

Normally, this would look for '/var/www/config.php' first, and if not found, then it would try '/var/local/php/config.php'.

But if you also have this in php.ini:

  open_basedir = /var/www/:/var/local/php/

Then the require would reverse the order of the search, and load '/var/local/php/config.php', even when the local 'config.php' file exists.

Furthermore, if include_path contains directories not in open_basedir, you can end up with a fatal error. For example, change the directive to:

  open_basedir = /var/www/:/var/local/includes/php/

Now the require will first find '/var/local/php/config.php' from the include_path, try to include it, but be unable to because of the open_basedir restrictions.
up
-2
amolitor at molitor-design dot com
11 years ago
Amusingly, the include_path logically includes the current directory of the running file as the last entry all the time anyways, so part of the business about shoving "." into the include_path is spurious -- it's "there" on the end all the time, at least in the 5.2.12 source (see main/fopen_wrappers.c around line 503).

This one had me goin' for a while.
up
-3
leo at korfu dot cz
14 years ago
"If the size of post data is greater than post_max_size..."

It seems that a more elegant way is comparison between post_max_size and $_SERVER['CONTENT_LENGTH']. Please note that the latter includes not only size of uploaded file plus post data but also multipart sequences. Leo
up
-4
iko at vision dot sk
8 years ago
auto_globals_jit setting is also affecting $_REQUEST superglobal in 5.3 It is not explicitly stated in documentation.
up
-5
mrok at mrok dot com
12 years ago
Note that on some Unix systems (i.e. PHP 5.1.6 on Centos 5.2) include_path in php.ini should NOT be quoted.

For example, instead of

include_path='.:/usr/share/php'

use

include_path=.:/usr/share/php

Using quotes does not cause any error message, but all of your require_once() directives will fail (indicating that file could not be opened) - unless full path to target file is provided.
up
-2
diamondeagle at webmail dot co dot za
1 year ago
Note regarding the upload_tmp_dir setting and UNC Paths:

When using PHP on Windows OS and IIS FastCGI, if you need to use a UNC path to a folder on a network drive for the upload_tmp_dir setting then you must use three \ characters at the front of the UNC path.

Windows and PHP use the first slash as an escape character, so if you only use two slashes then it passes a UNC path with just one backslash. That is not valid for UNC paths and you many experience problems when uploading files, such as errors saying that "PHP is missing a temporary folder".

Correct:
upload_tmp_dir = "\\\path\to\your\folder"

Incorrect:
upload_tmp_dir = "\\path\to\your\folder"
up
-7
txyoji at yahoo dot com
7 years ago
If you enable "open_basedir" option, it will disable the realpath_cache. This can be a significant performance hit.

https://bugs.php.net/bug.php?id=53263
up
-7
AntonioK
10 years ago
Note that there is no way to disable eval() work by using disable_functions directive, because eval() is a language construct and not a function.

Many people advise to disable such potentially-insecure functions like system(), exec(), passthru(), eval() and so on in php.ini when not running in safe mode, but eval() would still work even it listed in disable_functions.
up
-4
alaa morad
2 years ago
add enctype="multipart/form-data" to your <form> tag or it will not upload any file even if file_uploads=on
ex:
<form method="POST" action="upload. php" enctype="multipart/form-data">
// form contents
</form>
up
-7
Adam
4 years ago
Remember that `open_basedir` restriction does not affect exec functions. As long as you do not disable exec functions (see `disable_functions`, users will be able to use `exec("/bin/cat [...]")` to access sensitive world readable files.
up
-11
kghbln
9 years ago
Adding multiple directories to open_basedir:

open_basedir = "/var/www/htdocs/:/var/www/tmp/" adds both paths /var/www/htdocs/ and /var/www/tmp/. Do not forget the trailing slash, otherwise the last directory will be considered as a prefix (< 5.3.4).

On Windows you use ; as the seperator.
up
-18
michael dot buergi at gmx dot net
7 years ago
the ini-setting "detect_unicode" is indeed "zend.detect_unicode" (according to the phpinfo of my 5.4.4)
up
-28
abc500x500 at gmail dot com
3 years ago
Please illuminate this:
memory_limit=128mb meaning which?

1-per script only then if in a moment 1000 user request php script maximum only 128mb of server ram use6 by script.
2-per script + per user if in a moment 1000 user request a php script about 1000*128mb=128gb ram use by script.
Thanks
To Top