Die Konfigurationsdatei wird beim Start von PHP eingelesen. Für die Servermodul-Versionen von PHP geschieht dies nur einmal beim Start des Webservers. Für die CGI- und CLI-Versionen geschieht dies bei jedem Aufruf.
Nach der php.ini wird an folgenden Orten in der angegebenen Reihenfolge gesucht:
Spezielle Orte für SAPI-Module (PHPIniDir-Direktive im Apache2, -c Kommandozeilenparameter in CGI in CLI, php_ini-Parameter in NSAPI, PHP_INI_PATH-Umgebungsvariable im THTTPD)
Die PHPRC-Umgebungsvariable. Vor PHP 5.2.0 wurde dies nach dem unten angegebenen Registrierungsschlüssel geprüft.
Seit PHP 5.2.0 kann die Position der php.ini-Datei für verschiedene Versionen von PHP gesetzt werden. Die folgenden Registrierungsschlüssel werden in der angegebenen Reihenfolge durchsucht: [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z], [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] und [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x], wobei x, y und z die Major-, Minor- und Release-Versionen von PHP darstellen. Falls ein Wert für IniFilePath in diesen Schlüsseln existiert, so wird der zuerst gefundene als Position der php.ini verwendet (nur unter Windows).
{HKEY_LOCAL_MACHINE\SOFTWARE\PHP}, Wert von IniFilePath (nur unter Windows)
Aktuelles Arbeitsverzeichnis (außer CLI)
Das Webserververzeichnis (für SAPI-Module) oder das PHP-Verzeichnis (andernfalls in Windows)
Windows-Verzeichnis (C:\windows oder C:\winnt) (unter Windows) oder die --with-config-file-path Kompilierungsoption
Falls die Datei php-SAPI.ini existiert (wobei SAPI die verwendete SAPI ist, was als Dateinamen z.B. php-cli.ini oder php-apache.ini ergibt), wird diese anstelle der php.ini verwendet. Der Name der SAPI kann durch php_sapi_name() ermittelt werden.
Hinweis:
Der Apache-Webserver wechselt beim Start das Arbeitsverzeichnis in das Wurzelverzeichnis, weshalb PHP versucht, die php.ini aus dem Wurzelverzeichnis zu lesen, wenn diese existiert.
Die Optionen der php.ini für Extensions werden auf den Handbuchseiten der jeweiligen Extensions behandelt. Die Beschreibung der Core-php.ini-Einstellungen ist im Anhang verfügbar. Es werden jedoch wahrscheinlich nicht alle PHP-Direktiven im Handbuch erläutert. Für eine komplette Liste der in Ihrer PHP-Version verfügbaren Einstellungen lesen Sie bitte die gut kommentierte php.ini. Möglicherweise kann die » aktuellste php.ini aus unserem CVS ebenfalls hilfreich sein.
Beispiel #1 php.ini-Beispiel
; Jeder Text in einer Zeile nach einem Semikolon, welches nicht ; in Anführungszeichen steht, wird ignoriert [php] ; Abschnittsmarkierungen (Text in eckigen Klammern) werden ebenfalls ignoriert ; Boolesche Werte können auf einen der folgenden Werte eingestellt werden: ; true, on, yes ; oder false, off, no, none register_globals = off track_errors = yes ; Sie können Zeichenketten in Anführungszeichen einschließen include_path = ".:/usr/local/lib/php" ; Backslashes werden wie alle anderen Zeichen behandelt include_path = ".;c:\php\lib"
Seit PHP 5.1.0 ist es möglich, sich auf bereits definierte .ini-Variablen innerhalb der .ini-Dateien zu beziehen. Zum Beispiel: open_basedir = ${open_basedir}":/new/dir".
"Since PHP 5.1.0, it is possible to refer to existing .ini variables from within .ini files."
If you have several configurations that you switch between (say development/testing/staging), or there is some other reason why several settings scattered through the .ini file might need to be changed all together on occasion, then combining this with a custom block can bring all the bits that need changing into one place:
[Customization]
custom.mode = "development"
custom.display_errors = "on"
custom.error_reporting = 30719
[PHP]
;;;;;;;;;;;;;;;;;;;
; About php.ini ;
....
And then refer to these variables in the rest of the file:
custom.session.save_path = "/tmp/"${custom.mode}
Bringing all the changes into one location in the file is often of immense benefit.
---
Unfortunately, variable names cannot (yet) be nested. Otherwise one could have one .ini file with several customisation blocks, and a single variable to choose which set of variables to use:
[Customization]
custom.mode = "development"
[Customization Development]
custom.development.display_errors = on
[Customization Production]
custom.development.display_errors = off
...
display_errors = ${custom.${custom.mode}.display_errors}
Something to note which is not well documented is that when you are specifying the path, it is JUST the path that is needed - not the path and filename. In the registry locations, you need to just put the folder path (e.g. C:\PHP\) and not the full path to the INI file (e.g. C:\PHP\php.ini). This will particularly save you some headaches if you are trying to run multiple versions of PHP on one server!