Start · Sprachen · PHP · Referenz · parse_ini_file

parse_ini_file

Funktion

Liest eine INI-Konfigurationsdatei ein und gibt deren Inhalt als assoziatives Array zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

parse_ini_file(string $filename, bool $process_sections = false, int $scanner_mode = INI_SCANNER_NORMAL): array|false

Beschreibung

parse_ini_file() liest eine INI-Datei im klassischen Windows-INI-Format und wandelt deren Schlüssel-Wert-Paare in ein assoziatives PHP-Array um. Das Ergebnis kann direkt für Konfigurationszwecke genutzt werden, ohne dass eine eigene Parser-Logik geschrieben werden muss.

Mit dem Parameter $process_sections lässt sich steuern, ob die in eckigen Klammern definierten Abschnitte ([section]) als verschachtelte Arrays übernommen werden sollen. Ist er true, enthält das Rückgabe-Array für jeden Abschnitt einen eigenen Unterschlüssel mit den zugehörigen Einträgen.

Der Parameter $scanner_mode beeinflusst, wie Werte interpretiert werden. Mit INI_SCANNER_TYPED werden boolesche, null und numerische Werte automatisch in den passenden PHP-Typ konvertiert. INI_SCANNER_RAW liefert alle Werte als rohe Zeichenketten, ohne jede Interpretation.

Die Funktion ist besonders nützlich für einfache Anwendungskonfigurationen, bei denen ein schlankes Format ohne XML- oder YAML-Overhead bevorzugt wird. Sie sollte jedoch nicht zum Parsen der PHP-eigenen php.ini verwendet werden – dafür gibt es ini_get().

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur INI-Datei, die eingelesen werden soll. Kann absolut oder relativ zum aktuellen Arbeitsverzeichnis angegeben werden.
$process_sections bool false Ist dieser Wert true, werden Abschnitte ([section]) als verschachtelte Arrays im Ergebnis-Array abgebildet. Standardmäßig werden alle Schlüssel ohne Abschnittsunterscheidung flach zurückgegeben.
$scanner_mode int INI_SCANNER_NORMAL Steuert die Interpretationsweise der Werte. Mögliche Konstanten: INI_SCANNER_NORMAL (Standard), INI_SCANNER_RAW (keine Typinterpretation), INI_SCANNER_TYPED (automatische PHP-Typkonvertierung).

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg ein assoziatives Array mit den Schlüssel-Wert-Paaren aus der INI-Datei zurück. Im Fehlerfall (z. B. Datei nicht gefunden oder Lesefehler) wird false zurückgegeben.

Beispiele

Einfache INI-Datei ohne Abschnitte einlesen

<?php
// Inhalt von config.ini:
// app_name = "MeineApp"
// version  = 2
// debug    = false

$config = parse_ini_file('config.ini');

if ($config === false) {
    die('Konfigurationsdatei konnte nicht geladen werden.');
}

echo $config['app_name']; // MeineApp
echo $config['version'];  // 2
echo $config['debug'];    // '' (leerer String bei false mit NORMAL-Modus)
MeineApp 2

INI-Datei mit Abschnitten und typisiertem Scanner

<?php
// Inhalt von app.ini:
// [database]
// host    = localhost
// port    = 3306
// enabled = true
//
// [mail]
// smtp    = mail.example.com
// port    = 587

$config = parse_ini_file('app.ini', true, INI_SCANNER_TYPED);

if ($config === false) {
    die('Fehler beim Laden der Konfiguration.');
}

var_dump($config['database']['port']);    // int(3306)
var_dump($config['database']['enabled']); // bool(true)
echo $config['mail']['smtp'];             // mail.example.com
int(3306) bool(true) mail.example.com

// Wichtig · Fallstricke

Sicherheitshinweis: INI-Dateien sollten niemals in einem öffentlich zugänglichen Webverzeichnis gespeichert werden. Legen Sie Konfigurationsdateien außerhalb des Document-Root ab oder sichern Sie sie per .htaccess-Regel (deny from all), um unbefugten Zugriff zu verhindern.

Reservierte Wörter: Schlüssel wie null, yes, no, true, false, on, off, none haben im INI_SCANNER_NORMAL-Modus eine besondere Bedeutung und werden automatisch konvertiert. Um rohe Zeichenketten zu erhalten, sollten Werte in Anführungszeichen gesetzt oder INI_SCANNER_RAW verwendet werden.

Zeichenkodierung: Die Funktion unterstützt kein natives UTF-8-BOM. Dateien mit BOM können zu unerwarteten Ergebnissen beim ersten Schlüssel führen; BOM sollte daher beim Speichern der INI-Datei vermieden werden.