Signatur
Beschreibung
Yaf_Config_Ini ist Teil des Yaf-Frameworks (Yet Another Framework) und ermöglicht das Einlesen von Konfigurationsdaten aus klassischen INI-Dateien. Die Klasse nutzt intern die PHP-Funktion parse_ini_file(), erweitert diese jedoch um Unterstützung für verschachtelte Abschnitte (Sections) und hierarchische Schlüssel mittels Punkt-Notation (z. B. database.host).
Eine besondere Stärke von Yaf_Config_Ini ist die Vererbung von Sektionen: Mit der Syntax [production : common] kann eine Sektion alle Werte einer anderen Sektion erben und einzelne Werte überschreiben. Dies ermöglicht eine saubere Trennung zwischen Entwicklungs-, Test- und Produktivumgebungen ohne redundante Konfigurationsangaben.
Da die Klasse Iterator, ArrayAccess und Countable implementiert, kann auf die geladene Konfiguration sowohl über Objekt-Eigenschaften ($config->database->host) als auch über Array-Syntax ($config['database']['host']) zugegriffen werden. Außerdem ist sie mit foreach iterierbar.
Die Klasse eignet sich besonders für Yaf-basierte Anwendungen, bei denen die Konfiguration zentral in einer INI-Datei verwaltet wird, kann aber grundsätzlich auch unabhängig vom restlichen Yaf-Framework eingesetzt werden, sofern die Yaf-Extension installiert ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $config_file Pflicht | string | Pfad zur INI-Datei, die geladen werden soll. Die Datei muss lesbar und gültig formatiert sein. | |
| $section | string | Name der INI-Sektion, die geladen werden soll. Wird dieser Parameter angegeben, werden nur die Werte der angegebenen Sektion (inklusive geerbter Werte) geladen. Bleibt er leer, werden alle Sektionen als verschachtelte Struktur eingelesen. |
Rückgabewert
Beispiele
Einfache INI-Datei laden und Werte auslesen
<?php
// config.ini:
// [common]
// database.host = localhost
// database.port = 3306
// database.name = mydb
// app.debug = false
//
// [development : common]
// database.host = 127.0.0.1
// app.debug = true
// Nur die Sektion 'development' laden (erbt von 'common')
$config = new Yaf_Config_Ini('/pfad/zu/config.ini', 'development');
echo $config->database->host; // 127.0.0.1 (überschrieben)
echo $config->database->port; // 3306 (geerbt von common)
echo $config->app->debug; // true (überschrieben)
Alle Sektionen laden und über Array-Syntax zugreifen
<?php
// config.ini:
// [database]
// host = db.example.com
// user = root
// pass = secret
//
// [cache]
// driver = redis
// ttl = 3600
$config = new Yaf_Config_Ini('/pfad/zu/config.ini');
// Array-Zugriff auf verschachtelte Werte
echo $config['database']['host']; // db.example.com
echo $config['cache']['driver']; // redis
// Iteration über alle Sektionen
foreach ($config as $sectionName => $sectionData) {
echo "Sektion: $sectionName\n";
foreach ($sectionData as $key => $value) {
echo " $key = $value\n";
}
}
Sektionsvererbung für Umgebungen
<?php
// config.ini:
// [base]
// app.name = MeineApp
// app.version = 1.0
// log.level = error
//
// [staging : base]
// log.level = warning
//
// [production : base]
// app.name = MeineApp Prod
// log.level = error
$env = 'staging'; // z. B. aus Umgebungsvariable bestimmen
$config = new Yaf_Config_Ini('/pfad/zu/config.ini', $env);
echo $config->app->name; // MeineApp (geerbt)
echo $config->app->version; // 1.0 (geerbt)
echo $config->log->level; // warning (überschrieben)
// Wichtig · Fallstricke
Abhängigkeit: Yaf_Config_Ini erfordert die Installation der Yaf PECL-Extension. Sie ist kein Bestandteil des PHP-Kerns und muss über PECL oder den Paketmanager des Betriebssystems installiert werden.
Sicherheitshinweis: INI-Dateien mit sensiblen Daten (Datenbankpasswörter, API-Schlüssel etc.) sollten niemals im öffentlich erreichbaren Web-Verzeichnis abgelegt werden. Stellen Sie sicher, dass der Webserver keinen direkten Zugriff auf Konfigurationsdateien gewähren kann (z. B. über .htaccess-Regeln oder Ablage außerhalb des Document-Root).
Punkt-Notation: Schlüssel mit Punkten in der INI-Datei (z. B. database.host) werden automatisch als verschachtelte Objekte interpretiert. Ein Schlüssel wie a.b.c = value ist als $config->a->b->c abrufbar.
Schreibschutz: Standardmäßig ist die geladene Konfiguration schreibgeschützt (readonly). Um Werte zur Laufzeit zu ändern, muss beim Konstruktor-Aufruf ein dritter Parameter gesetzt oder die entsprechende Methode der Basisklasse genutzt werden — dies hängt von der jeweiligen Yaf-Version ab.