While the manual says that the file specified by auto_prepend_file is included as if it were called by include(), in fact the file is included as if it were called by require().
In other words, if PHP cannot find the file that you specify with auto_prepend_file, it will throw a fatal error.
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.
Httpd-Optionen
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| async_send | "0" | PHP_INI_ALL |
Sprachoptionen
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| short_open_tag | "1" | PHP_INI_ALL | PHP_INI_ALL in PHP <= 4.0.0. PHP_INI_PERDIR in PHP < 5.3.0 |
| asp_tags | "0" | PHP_INI_PERDIR | PHP_INI_ALL in PHP <= 4.0.0. |
| precision | "14" | PHP_INI_ALL | |
| serialize_precision | "17" | PHP_INI_ALL | Verfügbar seit PHP 4.3.2. Bis PHP 5.3.5 war der Standardwert 100. |
| y2k_compliance | "1" | PHP_INI_ALL | Entfernt ab PHP 5.4.0. |
| allow_call_time_pass_reference | "1" | PHP_INI_PERDIR | PHP_INI_ALL in PHP <= 4.0.0. Entfernt ab PHP 5.4.0. |
| disable_functions | "" | Nur php.ini | Verfügbar seit PHP 4.0.1. |
| disable_classes | "" | Nur php.ini | Verfügbar seit PHP 4.3.2. |
| exit_on_timeout | "" | PHP_INI_ALL | Verfügbar seit PHP 5.3.0. |
| expose_php | "1" | Nur php.ini | |
| zend.multibyte | "0" | PHP_INI_ALL | Verfügbar seit PHP 5.4.0. |
| zend.script_encoding | NULL | PHP_INI_ALL | Verfügbar seit PHP 5.4.0. |
| zend.signal_check | "0" | PHP_INI_SYSTEM | Verfügbar seit PHP 5.4.0. |
| zend.ze1_compatibility_mode | "0" | PHP_INI_ALL | Verfügbar seit PHP 5.0.0. Entfernt ab PHP 5.3.0 |
| detect_unicode | "1" | PHP_INI_ALL | Verfügbar seit PHP 5.1.0. Dieses veraltete Feature wird in der Zukunft sicherlich entfernt. |
Hier eine kurze Erklärung der Konfigurationsoptionen:
-
short_open_tagboolean -
Bestimmt, ob die Kurzform (
<? ?>) des PHP-Öffnungs-Tags erlaubt werden soll. Wenn Sie PHP in Kombination mit XML benutzen wollen, dann deaktivieren Sie diese Option, um<?xml ?>nutzen 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 ?>) benutzen.Hinweis:
Vor PHP 5.4.0 betraf diese Option auch die Kurzform
<?=, die zu<? echoidentisch ist. Um diese Kurzform nutzen zu können, mussteshort_open_tagauf on gesetzt sein. Seit PHP 5.4.0 ist<?=immer verfügbar. - Dieser Schalter aktiviert die Unterstützung von ASP <% %> Tags als Erweiterung zu den Üblichen <?php ?> Tags. Dieses beinhaltet auch die Kurzform der Variablenausgabe <%= $value %>. Weitere Informationen finden Sie hier: Den HTML-Bereich der Datei verlassen.
-
precisioninteger - Die Anzahl der signifikanten Stellen, die in Fließkommazahlen dargestellt werden.
-
serialize_precisioninteger - Die Anzahl der signifikanten Stellen, die gespeichert werden wenn Fließkommazahlen serialisiert werden.
-
y2k_complianceboolean - Erzwingen der Jahr 2000-Kompatibilität (erzeugt eventuell Probleme mit nicht-kompatiblen Browsern).
-
allow_call_time_pass_referenceboolean -
Bestimmt, ob eine Warnung geworfen werden soll, wenn einer Funktion Argumente beim Aufruf als Referenz zu übergeben. Die empfohlene Methode zu bestimmen, welche Argumente per Referenz übergeben werden sollen, ist die Angabe in der Funktionsdeklaration. Wir empfehlen Ihnen, diese Option versuchsweise auf Off zu setzen und dann zu prüfen, ob Ihre Skripte noch korrekt laufen, um sicherzustellen, dass sie auch mit künftigen Versionen von PHP kompatibel sind (sie bekommen ein "Warning", wenn Sie diese Funktion trotzdem benutzen).
Die Übergabe von Argumenten per Referenz an eine Funktion beim Aufruf dieser Funktion wird aus Gründen der Lesbarkeit des Codes als veraltet angesehen. Eine Funktion kann die ihr übergebenen Argumente in einer undokumentierten und unerwünschten Weise verändern, wenn bei der Deklaration der Funktion nicht klar ist, welche Argumente als Referenz übergeben werden. Um unerwünschte Nebeneffekte zu vermeiden, ist es besser, Argumente die als Referenz übergeben werden sollen nur in der Funktionsdeklaration zu kennzeichnen.
Siehe auch Referenzen in PHP.
Changelog for allow_call_time_pass_reference Version Beschreibung 5.4.0 Aus PHP entfernt. 5.3.0 Wirft einen Fehler der Stufe E_DEPRECATED.5.0.0 Deprecated (veraltet) und wirft einen Fehler der Stufe E_COMPILE_WARNING. -
expose_phpboolean -
Bestimmt, ob PHP die Tatsache, dass es auf dem Server installiert ist, über einen Header bekannt geben darf (z.B. X-Powered-By: PHP/5.3.7). Weiterhin wird dadurch kontrolliert, ob das PHP-Logo durch das Anhängen eines speziellen URL-Segments erreichbar ist (z.B. » http://www.php.net/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42). Dies beeinflusst die Ausgabe von phpinfo(), da bei Ausgeschalteter Option das PHP-Logo und die Credits nicht angezeigt werden.
Weitere Informationen unter php_logo_guid() und phpcredits().
-
disable_functionsstring -
Diese Direktive ermöglicht das Deaktivieren einzelner Funktionen aus Sicherheitsgründen. Die Funktionen werden als kommagetrennte Liste von Funktionsnamen übergeben. Die Direktive ist unabhängig vom Safe Mode.
Nur interne Funktionen können über diese Direktive deaktiviert werden. Nutzer definierte Funktionen sind nicht betroffen.
Diese Direktive muss in php.ini gesetzt werden. Sie kann nicht in beispielsweise httpd.conf gesetzt werden.
-
disable_classesstring -
Diese Direktive ermöglicht das Deaktivieren einzelner Klassen aus
Sicherheitsgründen. Die Funktionen werden
als kommagetrennte Liste von Klassennamen übergeben. Die Direktive
ist unabhängig vom Safe Mode.
Diese Direktive muss in php.ini gesetzt werden. Sie kann nicht in
beispielsweise httpd.conf gesetzt werden.
Hinweis: Verfügbarkeitshinweis
Diese Direktive gibt es seit PHP 4.3.2. -
zend.ze1_compatibility_modeboolean -
Aktiviert den Kompatibilätsmodus mit der Zend Engin 1 (PHP4). Diese Einstellung wirkt sich auf das Klonen, Casten und Vergleichen von Objekten aus. In diesem Modus werden Objekte standardmäßig als Werte anstelle von Referenzen übergeben.
Siehe auch den Abschnitt Von PHP 4 auf PHP 5 wechseln.
WarnungDieses Feature wurde in PHP 5.3.0 DEPRECATED und ENTFERNT.
-
zend.multibyteboolean -
Erlaubt das Parsen von Source Code Dateien in Multibyte Encodings.
-
zend.script_encodingstring -
Dieser Wert wird benutzt, sofern keine declare(encoding=...) Direktive am Anfang des Skriptes genutzt wird.
-
zend.signal_checkboolean -
Ob während des Shutdowns geprüft werden soll, ob Signal Handler ersetzt wurden.
-
detect_unicodeboolean -
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.
-
exit_on_timeoutboolean -
Diese Einstellung betrifft nur Apache1 mit mod_php. Sie zwingt den Apache Kind-Prozess 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
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| memory_limit | "128M" | PHP_INI_ALL | "8M" vor PHP 5.2.0, "16M" in PHP 5.2.0 |
Hier eine kurze Erklärung der Konfigurationsoptionen:
-
memory_limitinteger -
Setzt den Maximalwert des Speichers in Byte, den 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, stellen Sie diese Direktive auf den Wert -1.
Um diese Direktive verwernden zu können, war es in PHP Versionen vor 5.2.1 notwendig, dass bei der Kompilierung in der Konfigurationszeile --enable-memory-limit verwendet wurde. Dies war außerdem notwendig, damit die Funktionen memory_get_usage() und memory_get_peak_usage() definiert wurden.
Wird ein integer-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.
Performancetuning
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| realpath_cache_size | "16K" | PHP_INI_SYSTEM | Verfügbar seit PHP 5.1.0. |
| realpath_cache_ttl | "120" | PHP_INI_SYSTEM | Verfügbar seit PHP 5.1.0. |
Hier eine kurze Erklärung der Konfigurationsoptionen:
-
realpath_cache_sizeinteger -
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.
-
realpath_cache_ttlinteger -
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
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| track_vars | "On" | PHP_INI_?? | |
| arg_separator.output | "&" | PHP_INI_ALL | Verfügbar seit PHP 4.0.5. |
| arg_separator.input | "&" | PHP_INI_PERDIR | Verfügbar seit PHP 4.0.5. |
| variables_order | "EGPCS" | PHP_INI_PERDIR | PHP_INI_ALL in PHP <= 5.0.5. |
| request_order | "" | PHP_INI_PERDIR | Verfügbar seit PHP 5.3.0 |
| auto_globals_jitt | "1" | PHP_INI_PERDIR | Verfügbar seit PHP 5.0.0. |
| register_globals | "0" | PHP_INI_PERDIR | PHP_INI_ALL in PHP <= 4.2.3. Entfernt ab PHP 5.4.0. |
| register_argc_argv | "1" | PHP_INI_PERDIR | PHP_INI_ALL in PHP <= 4.2.3. |
| register_long_arrays | "1" | PHP_INI_PERDIR | Verfügbar seit PHP 5.0.0. |
| post_max_size | "8M" | PHP_INI_PERDIR | PHP_INI_SYSTEM in PHP <= 4.2.3. Verfügbar seit PHP 4.0.3. |
| gpc_order | "GPC" | PHP_INI_ALL | |
| auto_prepend_file | NULL | PHP_INI_PERDIR | PHP_INI_ALL in PHP <= 4.2.3. |
| auto_append_file | NULL | PHP_INI_PERDIR | PHP_INI_ALL in PHP <= 4.2.3. |
| default_mimetype | "text/html" | PHP_INI_ALL | |
| default_charset | "" | PHP_INI_ALL | |
| always_populate_raw_post_data | "0" | PHP_INI_PERDIR | PHP_INI_ALL in PHP <= 4.2.3. Verfügbar seit PHP 4.1.0. |
| allow_webdav_methods | "0" | PHP_INI_PERDIR |
Hier eine kurze Erklärung der Konfigurationsoptionen:
-
track_varsboolean -
Wenn diese Option aktiviert ist, sind Umgebungs-, GET-, POST-, Cookie- und Server-Variablen in den globalen assoziativen Arrays $_ENV, $_GET, $_POST, $_COOKIE, und $_SERVER.
Beachten Sie, dass seit PHP 4.0.3,
track_varsimmer eingeschaltet ist. -
arg_separator.outputstring -
Das Trennzeichen, das in von PHP generierten URLs benutzt wird, um Argumente abzutrennen.
-
arg_separator.inputstring -
Liste der Trennzeichen, die von PHP beim Parsen von URLs zu Variablen benutzt werden.
Hinweis:
Jeder Buchstabe in dieser Option wird als Trennzeichen interpretiert!
-
variables_orderstring -
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.
Falls die veraltete Einstellung register_globals eingeschaltet ist, dann legt variables_order ebenfalls die Reihenfolge fest, in der ENV, GET, POST, COOKIE und SERVER Variablen im globalen Namensraum veröffentlicht werden. Falls also zum Beispiel variables_order auf "EGPCS" eingestellt und register_globals eingeschaltet ist und ebenfalls sowohl $_GET['action'] als auch $_POST['action'] gesetzt sind, dann wird $action den Wert aus $_POST['action'] beinhalten, da P im Beispiel nach G erscheint.
WarnungSowohl im CGI als auch im FastCGI SAPI enthält $_SERVER immer auch Variablen aus dem Environment, S ist hier immer equvalent zu ES unabhängig davon ob E noch anderweitig in der Direktive benutzt wird.
Hinweis:
Der Inhalt und die Reihenfolge von $_REQUEST sind von dieser Direktive ebenfalls betroffen.
-
request_orderstring -
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 überscrheiben bisherige Werte gleichen Namens.
Ist diese Direktive nicht gesetzt so wird statt dessen 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_jitboolean -
Wenn eingeschaltet werden die Variablen SERVER und ENV erzeugt, sobald diese das erste mal verwendet werden (Just In Time) anstelle des Ausführungsbeginns des Skriptes. Wenn diese Variablen in einem Skript nicht verwendet werden wird das Einschalten dieser Einstellung einen Geschwindigkeitszuwachs hervorbringen.
Die PHP Einstellungen register_globals, register_long_arrays, und register_argc_argv müssen ausgeschaltet sein, damit diese Einstellung Wirkung zeigt. Seit PHP 5.1.3 ist es nicht mehr notwendig register_argc_argv auszuschalten.
WarnungOb SERVER und ENV Variablen benutzt werden wird bereits zur Kompilationszeit geprüft, ein Zugriff über variable Variablen führt daher nicht dazu das diese initialisiert werden.
-
register_globalsboolean -
Bestimmt, ob die EGPCS (Environment/Umgebung, GET, POST, Cookie, Server) Variablen als globale Variablen registriert werden sollen.
Seit » PHP 4.2.0 ist diese Einstellung standardmäßig ausgeschaltet.
Bitte lesen Sie auch das Sicherheits-Kapitel über die Benutzung von register_globals für weitere Informationen.
Bitte beachten Sie, dass
register_globalsnicht während der Laufzeit Ihrer Skripte gesetzt werden kann ( ini_set()). Wenn Ihr Server es erlaubt, können Sie aber .htaccess wie oben beschrieben verwenden. Beispiel für einen .htaccess Eintrag:php_flag register_globals on.Hinweis:
register_globalswird durch die Option variables_order beeinflusst.WarnungDieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT.
-
register_argc_argvboolean - Bestimmt, ob die argv- & argc-Variablen deklariert werden sollen (betrifft die GET-Informationen). Siehe auch Kommandozeile.
-
register_long_arraysboolean -
Bestimmt, ob PHP die nicht mehr empfohlenen langen Varianten
($HTTP_*_VARS) der vordefinierten
Variablen registrieren soll.
Wenn On (Standardwert), dann werden PHP-Variablen wie
$HTTP_GET_VARS definiert. Wenn Sie diese
nicht nutzen, empfehlen wir Ihnen, diese Option aus Gründen der
Performance auf "off" zu setzen. Benutzen Sie stattdessen
die superglobalen Arrays wie $_GET.
Diese Option ist seit PHP 5.0.0 verfügbar.
Warnung
Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT.
-
enable_post_data_readingboolean - 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 Arbeitsspeicher-effizient zu verarbeiten.
-
post_max_sizeinteger -
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.
Wenn eine maximale Speichergrenze während des Kompilierens aktiviert
wurde, dann betrifft auch memory_limit den Datei-Upload.
Allgemein sollte memory_limit
größer als
post_max_sizesein. Wird ein integer-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 die Daten verarbeitende Skript weitergibt, d.h. <form action="edit.php?processed=1"> und daraufhin prüfen, 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 32 bit Integer überschreiten da Ihre Skripte sonst fehlschlagen werden.
-
gpc_orderstring -
Legt die Auswertungsreihenfolge für GET-/POST-/COOKIE-Variablen fest. Die Standardeinstellung ist "GPC". Wenn Sie diesen Wert auf z.B. "GP" setzen, dann ignoriert PHP Cookies, und wird jede GET-Variable mit POST-Variablen des gleichen Namens überschreiben.
Hinweis:
Diese Option ist in PHP 4 nicht verfügbar. Benutzen Sie stattdessen variables_order.
-
auto_prepend_filestring -
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 require Funktion eingebunden hätten, dabei wird ein gesetzter include_path beachtet.
Der spezielle Wert none deaktiviert Auto-Prepending.
-
auto_append_filestring -
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 require Funktion 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_mimetypestring -
-
default_charsetstring -
Seit Version 4.0.0 gibt PHP standardmäßig immer eine Zeichen-Kodierung im "Content-type:"-Header aus. Um dies zu verhindern, lassen Sie diese Option leer.
-
always_populate_raw_post_databoolean -
Bestimmt, ob die Variable $HTTP_RAW_POST_DATA mit den unbehandelten POST Daten gefüllt werden soll. Andernfalls wird die Variable nur mit Daten von unbekanntem MIME Typ gefüllt. Die bevorzugte Methode, um auf unbehandelte POST Daten zuzugreifen ist aber php://input. $HTTP_RAW_POST_DATA ist bei enctype="multipart/form-data" nicht verfügbar.
-
allow_webdav_methodsboolean -
Diese Einstellung steht nur für Versionen bis PHP 4.3.2 zur Verfügung. Bestimmt, ob WebDAV-HTTP-Requests in PHP-Skripten erlaubt sein sollen (z.B. PROPFIND, PROPPATCH, MOVE, COPY, etc.). Wenn Sie die POST-Daten solcher Requests erhalten wollen, müssen Sie auch always_populate_raw_post_data aktivieren.
Siehe auch magic_quotes_gpc, magic-quotes-runtime und magic_quotes_sybase.
Pfade und Verzeichnisse
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| include_path | ".;/path/to/php/pear" | PHP_INI_ALL | |
| open_basedir | NULL | PHP_INI_ALL | PHP_INI_SYSTEM in PHP < 5.3.0 |
| doc_root | NULL | PHP_INI_SYSTEM | |
| user_dir | NULL | PHP_INI_SYSTEM | |
| extension_dir | "/path/to/php" | PHP_INI_SYSTEM | |
| extension | NULL | Nur php.ini | |
| zend_extension | NULL | Nur php.ini | |
| zend_extension_debug | NULL | Nur php.ini | |
| zend_extension_debug_ts | NULL | Nur php.ini | |
| zend_extension_ts | NULL | Nur php.ini | |
| cgi.check_shebang_line | "1" | PHP_INI_SYSTEM | Verfügbar seit PHP 5.2.0. |
| cgi.fix_pathinfo | "1" | PHP_INI_SYSTEM | Verfügbar seit PHP 4.3.0. Vor PHP 5.2.1 PHP_INI_ALL. |
| cgi.force_redirect | "1" | PHP_INI_SYSTEM | Verfügbar seit PHP 4.2.0. Vor PHP 5.2.1 PHP_INI_ALL. |
| cgi.redirect_status_env | NULL | PHP_INI_SYSTEM | Verfügbar seit PHP 4.2.0. Vor PHP 5.2.1 PHP_INI_ALL. |
| cgi.rfc2616_headers | "0" | PHP_INI_ALL | Verfügbar seit PHP 4.3.0. |
| fastcgi.impersonate | "0" | PHP_INI_SYSTEM | Verfügbar seit PHP 4.3.0. Vor PHP 5.2.1 PHP_INI_ALL. |
| fastcgi.logging | "1" | PHP_INI_SYSTEM | Verfügbar seit PHP 4.3.0. Vor PHP 5.2.1 PHP_INI_ALL. |
Hier eine kurze Erklärung der Konfigurationsoptionen:
-
include_pathstring -
Hier können Sie eine Liste von Verzeichnissen angeben, in dem 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 path 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 Warning oder Error wirft. Der include path 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 path zu nutzen.
-
open_basedirstring -
Begrenzt die Dateien, die von PHP geöffnet werden auf einen bestimmten Ordner inklusive seiner Unterordner. Diese Direktive ist wirksam, EGAL, ob Safe Mode an oder aus ist.
Wenn ein Skript versucht, eine Datei zu öffnen, zum Beispiel mit fopen() oder gzopen(), wird der Ort der Datei geprüft. Wenn die Datei nicht im Verzeichnisbaum, der in open_basedir angegeben ist, liegt, wird PHP die Datei nicht öffnen. 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.
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 geändert oder deaktiviert werden (z.B. für einige virtuelle Hosts), genau wie jede andere Direktive mit "php_admin_value open_basedir none".
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 Einschränkung durch open_basedir geschieht durch einen Prefix, nicht durch einen Verzeichnisnamen. Das heißt, dass "open_basedir = /dir/incl" das Verzeichnis "/dir/include" ebenso einschließt wie "/dir/incls", wenn beide existieren. Wenn die Einschränkung auf ein bestimmtes Verzeichnis begrenzt werden soll, muss der Pfad mit einem Schrägstrich enden. Beispiel: open_basedir = /dir/incl/
Standardmäßig dürfen alle Dateien geöffnet werden.
Hinweis:
Seit PHP 5.3.0 kann open_basedir zur Laufzeit weiter verengt 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_SEPARATORKonstante als vom Betriebssystem unabhängiges Trennzeichen verwendet werden. -
doc_rootstring -
Hier wird das Stammverzeichnis der PHP-Skripte angegeben. Diese Option wird nur benutzt, wenn ein Wert angegeben wird. Wenn PHP mit Safe Mode konfiguriert wurde, werden alle Dateien außerhalb dieses Verzeichnisses ignoriert. 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 benutzen.
-
user_dirstring -
Der Basisname des Verzeichnisses, das für Benutzer-Verzeichnisse mit PHP-Dateien benutzt wird, z.B. public_html.
-
extension_dirstring -
Verzeichnis, in dem PHP dynamisch zu ladende Extensionen findet. Siehe auch enable_dl und dl().
-
extensionstring -
Dynamisch zu ladende Extensionen, die geladen werden sollen, wenn PHP gestartet wird.
-
zend_extensionstring -
Absoluter Pfad zu einer dynamisch ladbaren Zend Extension (beispielsweise APD), welche geladen werden soll, wenn PHP startet.
-
zend_extension_debugstring -
Variante von zend_extension für Erweiterungen, die mit Debug-Informationen kompiliert wurden.
-
zend_extension_debug_tsstring -
Variante von zend_extension für Erweiterungen, die mit Debug-Informationen und Thread-Safety kompiliert wurden.
-
zend_extension_tsstring -
Variante von zend_extension für Erweiterungen, die mit Thread-Safety kompiliert wurden.
-
cgi.check_shebang_lineboolean -
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 Script sowohl die alleinestehende Ausführung als auch mittels PHP CGI unterstützt. PHP überspringt diese Zeile im CGI Modus und ignoriert ihren Inhalt, wenn diese Direktive eingeschaltet ist.
-
cgi.fix_pathinfoboolean -
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 schauen Sie in 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, was auch nachwievor das Standardverhalten ist. Es wird empfohlen, Ihre Skripte dahingehend anzupassen, statt PATH_TRANSLATED SCRIPT_FILENAME zu verwenden.
-
cgi.force_redirectboolean -
cgi.force_redirect wird benötigt, um Sicherheit zu garantieren, wenn PHP als CGI-Version unter den meisten Webservern läuft. 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.redirect_status_envstring -
Wenn cgi.force_redirect eingeschaltet ist und Sie nicht den Apache- oder Netscape-Webserver (iPlanet) benutzen, 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_headersint -
Bestimmt, welcher Typ von Headern benutzt werden soll, wenn HTTP-Antwort-Codes gesendet werden. Wenn diese Option auf 0 gesetzt ist, sendet PHP einen "Status:"-Header, der von Apache und anderen Webservern unterstützt wird. Ist sie auf 1 gesetzt, sendet PHP einen zu » RFC 2616 konformen Header. Wenn Sie diese Option nicht verstehen, lassen Sie den Wert auf 0.
-
fastcgi.impersonatestring -
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 benutzen. Der Standardwert ist 0.
-
fastcgi.loggingboolean -
Schaltet SAPI Logging an, wenn FastCGI benutzt wird. Standardmäßig ist Logging aktiviert.
Datei-Uploads
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| file_uploads | "1" | PHP_INI_SYSTEM | PHP_INI_ALL in PHP <= 4.2.3. Verfügbar seit PHP 4.0.3. |
| upload_tmp_dir | NULL | PHP_INI_SYSTEM | |
| max_input_nesting_level | 64 | PHP_INI_PERDIR | Verfügbar seit PHP 5.3.9. |
| max_input_vars | 1000 | PHP_INI_PERDIR | Verfügbar seit PHP 5.3.9. |
| upload_max_filesize | "2M" | PHP_INI_PERDIR | PHP_INI_ALL in PHP <= 4.2.3. |
| max_file_uploads | 20 | PHP_INI_SYSTEM | Verfügbar seit PHP 5.2.12. |
Hier eine kurze Erklärung der Konfigurationsoptionen:
-
file_uploadsboolean oder integer -
Bestimmt, ob Datei-Uploads per HTTP erlaubt sind. Siehe auch die Optionen upload_max_filesize, upload_tmp_dir und post_max_size.
Wird ein integer-Wert verwendet, wird dieser Wert in Bytes gemessen. Sie können auch die Kurzschreibweise verwenden, wie in dieser FAQ beschrieben. -
upload_tmp_dirstring -
Temporäres 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, benutzt 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_filesizeinteger -
Maximale Größe, die eine hochgeladene Datei haben darf.
Wird ein integer-Wert verwendet, wird dieser Wert in Bytes gemessen. Sie können auch die Kurzschreibweise verwenden, wie in dieser FAQ beschrieben. -
max_file_uploadsinteger -
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
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| sql.safe_mode | "0" | PHP_INI_SYSTEM |
Hier eine kurze Erklärung der Konfigurationsoptionen:
-
sql.safe_modeboolean -
Wenn diese Option eingeschaltet wird, werden Datenbankfunktionen, die Standardwerte vorgeben diese Werte anstelle der angegebenen Parameter verwenden. Zu Informationen über Standardwerte können Sie einen Blick auf die Dokumentation der Connect-Funktion der relevanten Datenbank werfen.
Windows spezifisch
| Name | Standard | Veränderbar | Changelog |
|---|---|---|---|
| windows_show_crt_warning | "0" | PHP_INI_ALL | Verfügbar seit PHP 5.4.0. |
Hier eine kurze Erklärung der Konfigurationsoptionen:
-
windows_show_crt_warningboolean -
Wenn diese Direktive angeschaltet ist, werden Windows CRT Warnings angezeigt. Vor PHP 5.4.0 wurden diese immer angezeigt.
default_charset doesn't always set the charset for all content types, it appears to only do so for some known ones such as text/html.
If your using other content type's ensure you set the charset manually.
Tested on php 5.3.10 with application/json
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.
register_long_arrays has a very odd behavior (at least in PHP 5.2):
With register_long_arrays=Off the $GLOBALS array will not contain [_SERVER] and [_REQUEST]. They are accessible as superglobals ($_SERVER, $_REQUEST), but they disappear from the $GLOBALS array!
If you need to use a path in your include_path that has a space in it - I found that I could make it work (in windows anyway) by setting a path like this
L:\Information Technology\Resources\lib\
in the include path like this listed below
include_path = ".;L:\Information" " Technology\Resources\lib\"
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.
For 'short_open_tag',
though it is marked as PHP_INI_ALL in changable column,
you should note the CHANGE_LOG column also:
PHP_INI_ALL in PHP <= 4.0.0.
PHP_INI_PERDIR in PHP < 5.3.0
So as of 4.0, it will not work if you wanna use
ini_set('short_open_tag') to change it's value on the fly.
"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
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.
Warning, if you change upload_max_filesize, please note that both post_max_size and memory_limit directives may have to change too.
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.
When display_errors is off, PHP will send an HTTP 500 result header on a fatal error. This is usefull when working with AJAX applications.
the ini-setting "detect_unicode" is indeed "zend.detect_unicode" (according to the phpinfo of my 5.4.4)
auto_globals_jit setting is also affecting $_REQUEST superglobal in 5.3 It is not explicitly stated in documentation.
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.
note that when you turn on zend.multibyte,you should change mbstring internal encoding to match the script encoding.
example:
(php.ini)
zend.multibyte = On
zend.script_encoding = utf-8
;note this:
mbstring.internal_encoding = utf-8
another example:
(php.ini)
zend.multibyte = On
(script)
<?php
declare(encoding = 'utf-8');
ini_set('mbstring.internal_encoding', 'utf-8');
//now do your work...
?>
A handy trick to pick up parse errors in test_file.php if you can't set display_errors in php.ini or use .htaccess:
<?php
error_reporting (E_ALL);
ini_set ('display_errors', true);
include('./test_file.php');
?>
"post_max_size"
"[..]This can be tracked in various ways, e.g. by passing the $_GET variable to the script processing the data, i.e. <form action="edit.php?processed=1">, and then checking if $_GET['processed'] is set."
using PHP 4.4.8 it seems that only the $_POST array will be empty in case of the file is largen than post_max_size.
so above mentioned method does not work in my case.
i need to use $_POST['processed'] instead of $_GET['processed']
to make sure that all requests use SSL you can use this in a file that is set for auto_prepend_file. This ensures that all requests are SSL
<?php
if(empty($_SERVER['HTTPS']) || strtolower($_SERVER['HTTPS']) != 'on' )
header("Location: https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}") and exit();
?>
I wish the documentation was more clear as to whether the arg_separator.output character is automatically encoded when PHP outputs it. In other words, is "&" valid or do I need to specify the encoded character "&"? It would make sense to specify only "&" and hope that it is encoded as needed. That way the value could be read by other functions and encoded only when output to HTML, rather than having to test whether it is already encoded and decode it when necessary (for header redirection for example)
I did a little experimentation on the behaviour of auto_prepend_file as the order of access wasn't clear to me from the documentation.
1. Apache checks to see if the target file exists.
2. The prepend file is called
3. The target file is called
This means that you can use auto_prepend_file to change the target file before you access it however you can't generate new files.
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.
If you are having trouble getting the auto_prepend_file to work with the command line interface make sure that you have set it in the cli specific php.ini and that the read permission is set correctly for that php.ini file.
If you want to display the upload limit without knowing the server configuration, this may be useful:
<?php
function let_to_num($v){ //This function transforms the php.ini notation for numbers (like '2M') to an integer (2*1024*1024 in this case)
$l = substr($v, -1);
$ret = substr($v, 0, -1);
switch(strtoupper($l)){
case 'P':
$ret *= 1024;
case 'T':
$ret *= 1024;
case 'G':
$ret *= 1024;
case 'M':
$ret *= 1024;
case 'K':
$ret *= 1024;
break;
}
return $ret;
}
$max_upload_size = min(let_to_num(ini_get('post_max_size')), let_to_num(ini_get('upload_max_filesize')));
echo "Maximum upload file size is ".($max_upload_size/(1024*1024))."MB.";
?>
Do note however that this limit is not completely reliable; there are other factors which need to be taken into account, such as any other $_POST data and their size, the memory limit, and the script time limit. This does, however, give some rough limit, and helps you avoid "Doh!" problems where you can't figure out why your file won't upload. :)
Please be mindful, that if you plan on re-configuring / recompiling to add --enable-memory-limit support, you may need to run a 'make clean' before you run 'make'. Otherwise, you may end up with a phpinfo() that shows up with --enable-memory-limit as a configure parameter, but the memory_get_usage() function will still force a fatal error.
