Start · Sprachen · PHP · Referenz · parse_ini_string

parse_ini_string

Funktion

Analysiert einen INI-formatierten String und gibt dessen Inhalt als assoziatives Array zurück.

seit PHP 5.3.0 Kategorie: io

Signatur

parse_ini_string(string $ini_string, bool $process_sections = false, int $scanner_mode = INI_SCANNER_NORMAL): array|false

Beschreibung

parse_ini_string() verarbeitet einen String im INI-Format – wie er etwa in einer php.ini oder einer eigenen Konfigurationsdatei vorkommt – und wandelt ihn in ein PHP-Array um. Im Gegensatz zu parse_ini_file() liest diese Funktion aus einer Zeichenkette statt aus einer Datei, was sie ideal für Konfigurationen macht, die aus einer Datenbank, einer API-Antwort oder einem Speicher-Puffer stammen.

Wird der Parameter process_sections auf true gesetzt, liefert die Funktion ein mehrdimensionales Array, bei dem die Sektionsbezeichner (z. B. [database]) die Schlüssel der ersten Ebene bilden. Ohne Sektionsverarbeitung werden alle Schlüssel-Wert-Paare flach in einem einzigen Array zusammengefasst.

Über den Parameter scanner_mode lässt sich das Verhalten beim Typen-Parsing steuern: INI_SCANNER_NORMAL wandelt Werte wie true, false, yes, no, none und null automatisch in PHP-Typen um, während INI_SCANNER_RAW alle Werte als Strings belässt. INI_SCANNER_TYPED (ab PHP 5.6.1) versucht darüber hinaus, numerische Werte als int oder float zu erkennen.

Die Funktion eignet sich hervorragend für Unit-Tests von Konfigurationslogik, für das Einlesen von Konfigurationen aus Umgebungsvariablen oder für die Verarbeitung dynamisch erzeugter INI-Inhalte ohne Dateizugriff.

Parameter

Name Typ Default Beschreibung
$ini_string Pflicht string Der zu parsende String im INI-Format. Kommentare werden mit ; eingeleitet, Sektionen mit eckigen Klammern ([section]) und Schlüssel-Wert-Paare mit = getrennt.
$process_sections bool false Ist dieser Wert true, werden Sektionsbezeichner als übergeordnete Schlüssel im Rückgabe-Array verwendet, sodass ein mehrdimensionales Array entsteht.
$scanner_mode int INI_SCANNER_NORMAL Steuert, wie Werte interpretiert werden. Mögliche Werte: INI_SCANNER_NORMAL (Standard, konvertiert bekannte Bezeichner wie true/false), INI_SCANNER_RAW (alle Werte bleiben Strings), INI_SCANNER_TYPED (zusätzlich numerische Typkonvertierung, ab PHP 5.6.1).

Rückgabewert

Typ
array|false
Beschreibung
Bei Erfolg ein assoziatives Array mit den geparsten Schlüssel-Wert-Paaren. Bei einem Syntaxfehler oder einem sonstigen Fehler wird false zurückgegeben.

Beispiele

Einfache INI-Konfiguration parsen

<?php
$ini = "
; Datenbankeinstellungen
host = localhost
port = 3306
name = meine_datenbank
debug = true
";

$config = parse_ini_string($ini);

print_r($config);
Array ( [host] => localhost [port] => 3306 [name] => meine_datenbank [debug] => 1 )

Mehrere Sektionen verarbeiten

<?php
$ini = "
[database]
host = localhost
port = 3306
user = root
password = geheim

[cache]
driver = redis
ttl = 3600
enabled = true
";

$config = parse_ini_string($ini, process_sections: true);

echo $config['database']['host'] . PHP_EOL;
echo $config['cache']['driver'] . PHP_EOL;
echo $config['cache']['ttl'] . PHP_EOL;
localhost redis 3600

Scanner-Modus INI_SCANNER_TYPED verwenden

<?php
$ini = "
anzahl = 42
preis = 9.99
aktiv = true
name = Produkt
";

$raw    = parse_ini_string($ini, scanner_mode: INI_SCANNER_RAW);
$typed  = parse_ini_string($ini, scanner_mode: INI_SCANNER_TYPED);

var_dump($raw['anzahl']);   // string
var_dump($typed['anzahl']); // int
var_dump($typed['preis']);  // float
var_dump($typed['aktiv']);  // bool
string(2) "42" int(42) float(9.99) bool(true)

// Wichtig · Fallstricke

Sicherheitshinweis: Verarbeite niemals ungeprüfte Benutzereingaben als INI-String. Obwohl parse_ini_string() keine Dateien liest, können manipulierte INI-Inhalte unerwartete Array-Strukturen erzeugen und Anwendungslogik korrumpieren.

Reservierte Wörter: Schlüsselnamen wie null, yes, no, true, false, on, off, none sind im Modus INI_SCANNER_NORMAL reserviert und werden automatisch konvertiert (z. B. yes1, no""). Mit INI_SCANNER_RAW bleiben sie als Strings erhalten.

Anführungszeichen: Werte mit Sonderzeichen oder Leerzeichen sollten in doppelte Anführungszeichen eingeschlossen werden, z. B. name = "Mein Wert".