parse_ini_file
(PHP 4, PHP 5, PHP 7, PHP 8)
parse_ini_file — Parst eine Konfigurationsdatei
Beschreibung
$filename
, bool $process_sections
= false
, int $scanner_mode
= INI_SCANNER_NORMAL
): array|false
parse_ini_file() lädt die in
filename
angegebene Datei, und gibt
die darin enthaltenen Einstellungen in einem assoziativen
Array zurück.
Die Struktur der Ini-Datei ist identisch zur php.ini.
Parameter-Liste
-
filename
-
Der Dateiname der zu parsenden ini-Datei. Wenn ein relativer Pfad verwendet wird, wird er relativ zum aktuellen Arbeitsverzeichnis ausgewertet und dann entsprechend dem include_path.
-
process_sections
-
Setzt man den Parameter
process_sections
auftrue
, erhält man ein mehrdimensionales Array mit den Gruppennamen und Einstellungen. Der Standardwert fürprocess_sections
istfalse
-
scanner_mode
-
Kann entweder
INI_SCANNER_NORMAL
(Standard) oderINI_SCANNER_RAW
sein. IstINI_SCANNER_RAW
gesetzt, so werden die Werte der Optionen nicht geparst.Seit PHP 5.6.1 kann auch
INI_SCANNER_TYPED
angegeben werden. In diesem Modus werden soweit möglich die Typen von Boolean-, Null- oder Integer-Werten beibehalten. Die Zeichenketten"true"
,"on"
und"yes"
werden zutrue
konvertiert."false"
,"off"
,"no"
und"none"
werden alsfalse
angesehen."null"
wird in diesem Modus zunull
. Soweit möglich werden alle numerischen Zeichenketten zu Integertypen umgewandelt.
Rückgabewerte
Im Erfolgsfall werden die Einstellungen als assoziatives Array
zurückgegeben, ansonsten false
.
Beispiele
Beispiel #1 Inhalt der sample.ini
; Dies ist ein Beispiel für eine Konfigurationsdatei ; Kommentare beginnen wie in der php.ini mit ';' [erste_gruppe] eins = 1 fünf = 5 tier = VOGEL [zweite_gruppe] pfad = /usr/local/bin URL = "http://www.example.com/~username" [dritte_gruppe] phpversion[] = "5.0" phpversion[] = "5.1" phpversion[] = "5.2" phpversion[] = "5.3" urls[svn] = "http://svn.php.net" urls[git] = "http://git.php.net"
Beispiel #2 parse_ini_file()-Beispiel
Abgesehen von "magischen Konstanten" wie __FILE__
können auch Konstanten in einer
Ini-Datei geparst werden, indem man einen INI-Wert als Konstante
definiert, bevor parse_ini_file() aufgerufen wird.
Diese Konstante wird in die Ergebnisse integriert. Dabei werden nur
INI-Werte ausgewertet und der Wert muss genau die Konstante sein. Zum
Beispiel:
<?php
define ('VOGEL', 'Amsel');
// Ohne Gruppen analysieren
$ini_array = parse_ini_file("sample.ini");
print_r($ini_array);
// Mit Gruppen analysieren
$ini_array = parse_ini_file("sample.ini", TRUE);
print_r($ini_array);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Array ( [eins] => 1 [fünf] => 5 [tier] => Amsel [pfad] => /usr/local/bin [URL] => http://www.example.com/~username [phpversion] => Array ( [0] => 5.0 [1] => 5.1 [2] => 5.2 [3] => 5.3 ) [urls] => Array ( [svn] => http://svn.php.net [git] => http://git.php.net ) ) Array ( [erste_gruppe] => Array ( [eins] => 1 [fünf] => 5 [tier] => Amsel ) [zweite_gruppe] => Array ( [pfad] => /usr/local/bin [URL] => http://www.example.com/~username ) [dritte_gruppe] => Array ( [phpversion] => Array ( [0] => 5.0 [1] => 5.1 [2] => 5.2 [3] => 5.3 ) [urls] => Array ( [svn] => http://svn.php.net [git] => http://git.php.net ) ) )
Beispiel #3 parse_ini_file() parst eine php.ini
<?php
// Eine einfache Funktion, um das Ergebnis zu vergleichen
function janein($expression)
{
return($expression ? 'Ja' : 'Nein');
}
// Pfad der php.ini mittels der Funktion php_ini_loaded_file() holen
$ini_path = php_ini_loaded_file();
// Parsen der php.ini
$ini = parse_ini_file($ini_path);
// Werte ausgeben und vergleichen. Beachten Sie dass die Verwendung von
// get_cfg_var() die gleichen Ergebnisse für geparste und geladene
// Werte geben wird
echo '(geparst) magic_quotes_gpc = ' . janein($ini['magic_quotes_gpc']) . PHP_EOL;
echo '(geladen) magic_quotes_gpc = ' . janein(get_cfg_var('magic_quotes_gpc')) . PHP_EOL;
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
(geparst) magic_quotes_gpc = Ja (geladen) magic_quotes_gpc = Nein
Beispiel #4 Wert-Interpolation
Neben der Auswertung von Konstanten haben bestimmte Zeichen eine
besondere Bedeutung in einem ini-Wert. Darüber hinaus können
Umgebungsvariablen und zuvor definierte Konfigurationsoptionen (siehe
get_cfg_var()) mit der ${}
-Syntax gelesen
werden.
; | wird für bitweises OR verwendet three = 2|3 ; & wird für bitweises AND verwendet four = 6&5 ; ^ wird für bitweises XOR verwendet five = 3^6 ; ~ wird für bitweises Negieren verwendet negative_two = ~1 ; () wird für die Gruppierung verwendet seven = (8|7)&(6|5) path = $ also_five = $
Beispiel #5 Zeichen maskieren
Einige Zeichen haben in Zeichenketten in doppelten Anführungszeichen eine
besondere Bedeutung und müssen durch das Backslash-Präfix maskiert
werden. Dies sind vor allem das doppelte Anführungszeichen "
als Begrenzungszeichen und der Backslash \
selbst (wenn
darauf ein Sonderzeichen folgt):
quoted = "She said \"Exactly my point\"." ; Ergibt eine Zeichenkette mit Anführungszeichen darin. hint = "Use \\\" to escape double quote" ; Ergibt: Use \" to escape double quote
Es gibt eine Ausnahme für Windows-ähnliche Pfade: Es ist möglich, den abschließenden Backslash nicht zu maskieren, wenn auf die Zeichenkette in Anführungsstrichen direkt ein Zeilenumbruch folgt:
save_path = "C:\Temp\"
Wenn man doppelte Anführungszeichen gefolgt von einem Zeilenumbruch in einem mehrzeiligen Wert vermeiden muss, ist es möglich, die Verkettung von Werten auf folgende Weise zu verwenden (eine Zeichenkette mit zwei direkt aufeinanderfolgenden Anführungszeichen):
long_text = "Lorem \"ipsum\""" dolor" ; Ergibt: Lorem "ipsum"\n dolor
Ein weiteres Zeichen mit besonderer Bedeutung ist $
(das
Dollarzeichen). Wenn darauf eine öffnende geschweifte Klammer folgt, muss
es maskiert werden:
code = "\$"
Das Maskieren von Zeichen wird im Modus
INI_SCANNER_RAW
nicht unterstützt (in diesem Modus
werden alle Zeichen verarbeitet wie sie sind).
Zu beachten ist, dass der ini-Parser keine Standard-Maskierungssequenzen
unterstützt (\n
, \t
etc.). Falls erforderlich,
muss das Ergebnis von parse_ini_file() mit der
Funktion stripcslashes() nachbearbeitet werden.
Anmerkungen
Hinweis:
Diese Funktion hat nichts mit dem Laden der php.ini-Datei zu tun. Diese ist zum Ausführungszeitpunkt Ihres Skriptes bereits vollständig verarbeitet. Diese Funktion kann verwendet werden, um die Konfigurationsdateien Ihrer eigenen Anwendung zu lesen.
Hinweis:
Falls ein Wert der Ini-Datei ein nicht alphanumerisches Zeichen enthält muss dieser Wert in doppelte Anführungszeichen (") eingeschlossen werden.
Hinweis: Es gibt reservierte Schlüsselwörter, welche nicht als Schlüssel in Ini-Dateien verwendet werden dürfen. Diese umfassen:
null
,yes
,no
,true
,false
,on
,off
,none
. Die Wertenull
,off
,no
undfalse
ergeben""
und die Werteon
,yes
andtrue
ergeben"1"
, solange der ModusINI_SCANNER_TYPED
nicht verwendet wird . Die Zeichen?{}|&~!()^"
dürfen in einem Schlüssel nicht verwendet werden und haben im Wert besondere Bedeutung.
Hinweis:
Einträge ohne Gleichheitszeichen werden ignoriert. Beispielsweise würde "foo" ignoriert werden, während "bar =" geparst und mit einem leeren Wert hinzugefügt würde. Beispielsweise hat MySQL eine Einstellung "no-auto-rehash" in der my.cnf welche keinen Wert enthält und somit ignoriert würde.
Hinweis:
Ini-Dateien werden von Webservern in der Regel als reiner Text behandelt und daher den Browsern auf Anfrage zur Verfügung gestellt. Das bedeutet, dass Sie aus Sicherheitsgründen entweder Ihre ini-Dateien außerhalb des Web-Wurzelverzeichnisses (DocRoot) aufbewahren müssen oder Ihren Webserver so umkonfigurieren, dass sie nicht ausgeliefert werden. Wenn Sie beides nicht tun, kann dies ein Sicherheitsrisiko darstellen.