Start · Sprachen · PHP · Referenz · Yaconf

Yaconf

Klasse

Bietet statischen Lesezugriff auf Konfigurationswerte, die aus INI-Konfigurationsdateien über die Yaconf-PHP-Erweiterung geladen wurden.

seit PHP 1.0.0 Kategorie: misc

Signatur

class Yaconf

Beschreibung

Yaconf ist eine PECL-Erweiterung, die Konfigurationsdateien im INI-Format beim PHP-Start einmalig einliest und die Werte im Speicher hält. Im Gegensatz zu parse_ini_file() werden die Daten nicht bei jedem Request neu geladen, sondern sind als persistente, unveränderliche Werte direkt im PHP-Prozess verfügbar – was die Performance deutlich verbessert.

Die Klasse selbst bietet ausschließlich statische Methoden: Yaconf::get() liest einen Konfigurationswert anhand eines durch Punkte getrennten Schlüssels, Yaconf::has() prüft, ob ein bestimmter Schlüssel existiert. Eine Instanziierung ist nicht vorgesehen.

Yaconf eignet sich besonders für hochperformante Web-Anwendungen, die viele Requests verarbeiten und dabei auf eine zentrale, unveränderliche Konfiguration (z. B. Datenbankverbindungen, Feature-Flags, Umgebungsparameter) zugreifen müssen. Konfigurationsänderungen erfordern einen PHP-Prozess-Neustart (CLI) oder einen Worker-Neustart (FPM).

Die Konfigurationsdateien werden im Verzeichnis gespeichert, das in der php.ini über yaconf.directory angegeben wird. Jede Datei entspricht einem Abschnitt; der Schlüsselzugriff erfolgt nach dem Schema Dateiname.Abschnitt.Schlüssel.

Beispiele

Konfigurationswert lesen und auf Existenz prüfen

<?php
// Vorausgesetzt: yaconf.directory = /etc/yaconf
// Datei: /etc/yaconf/app.ini
// Inhalt:
// [database]
// host = "127.0.0.1"
// port = 3306
// name = "mydb"

// Prüfen, ob ein Schlüssel existiert
if (Yaconf::has('app.database.host')) {
    $host = Yaconf::get('app.database.host');
    echo $host; // 127.0.0.1
}

$port = Yaconf::get('app.database.port');
echo $port; // 3306

// Nicht vorhandener Schlüssel mit Standardwert
$timeout = Yaconf::get('app.database.timeout', 30);
echo $timeout; // 30
127.0.0.1 3306 30

Gesamten Abschnitt als Array auslesen

<?php
// Datei: /etc/yaconf/cache.ini
// [redis]
// host = "redis.local"
// port = 6379
// ttl  = 3600

// Den gesamten redis-Abschnitt als Array laden
$redisConfig = Yaconf::get('cache.redis');
if (is_array($redisConfig)) {
    echo $redisConfig['host']; // redis.local
    echo $redisConfig['port']; // 6379
    echo $redisConfig['ttl'];  // 3600
}

// Schnellcheck
var_dump(Yaconf::has('cache.redis.host')); // bool(true)
var_dump(Yaconf::has('cache.smtp'));       // bool(false)
redis.local 6379 3600 bool(true) bool(false)

// Wichtig · Fallstricke

Unveränderlichkeit: Yaconf-Werte sind zur Laufzeit schreibgeschützt. Es gibt keine Setter-Methode. Änderungen an den INI-Dateien werden erst nach einem Neustart des PHP-Prozesses bzw. FPM-Workers wirksam (sofern nicht yaconf.check_delay in der php.ini auf einen Wert > 0 gesetzt ist).

Installation: Yaconf ist keine Standard-PHP-Extension. Sie muss über PECL installiert werden: pecl install yaconf. Anschließend sind in der php.ini mindestens extension=yaconf und yaconf.directory=/pfad/zur/konfig erforderlich.

Sicherheit: Da die Konfigurationsdateien beim PHP-Start geladen werden und danach im Shared Memory liegen, sollten sensible Daten (Passwörter, API-Keys) durch geeignete Dateisystemberechtigungen geschützt werden. Yaconf selbst bietet keine Verschlüsselung.

Kompatibilität: Die Erweiterung ist vor allem für PHP-FPM- und CLI-Umgebungen konzipiert. Unter CGI oder Shared-Hosting-Umgebungen ist der Persistenzeffekt nicht vorhanden.