Parst eine Konfigurationsdatei

# parse_ini_file

(PHP 4, PHP 5, PHP 7, PHP 8)

parse_ini_file — Parst eine Konfigurationsdatei

### Beschreibung

function parse_ini_file(string `$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.

Warnung

Diese Funktion darf nicht mit unvertrauenswürdigen Eingaben verwendet werden, es sei denn, `scanner_mode` ist `INI_SCANNER_RAW`, da die geparste Ausgabe Werte von sensiblen Konstanten enthalten könnte, wie beispielsweise Konstanten, die ein Datenbank-Passwort enthalten.

### 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` auf `true`, erhält man ein mehrdimensionales Array mit den Gruppennamen und Einstellungen. Der Standardwert für `process_sections` ist `false`

`scanner_mode`

  Kann entweder `INI_SCANNER_NORMAL` (Standard) oder `INI_SCANNER_RAW` sein. Ist `INI_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 zu `true` konvertiert. `"false"`, `"off"`, `"no"` und `"none"` werden als `false` angesehen. `"null"` wird in diesem Modus zu `null`. 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)

    ; Auswerten der Umgebungsvariablen PATH
    path = ${PATH}

    ; Auswerten der Konfigurationsoption "memory_limit".
    configured_memory_limit = ${memory_limit}

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 = "\${test}"

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 Werte `null`, `off`, `no` und `false` ergeben `""` und die Werte `on`, `yes` and `true` ergeben `"1"`, solange der Modus `INI_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.

### Siehe auch

- parse_ini_string() - Analysiert einen Konfigurations-String

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open