Config hilft dabei Konfigurationsdaten zu verwalten, unabhängig davon, ob sie als XML-Dateien, PHP-Array oder in anderen Formen vorliegen. Es unterstützt eine Reihe von Funktionen:
Parsen verschiedener Konfigurationsformate.
Manipulation von Sektionen, Direktiven, Kommentaren und Leerzeichen wie Sie wollen.
Konfigurationsdaten im gewünschten Format zu speichern.
Das Config-Objekt fungiert als Container für weitere Config_Container-Objekte. Es macht nicht viel, vereinfacht aber Lese- und Schreiboperationen. Es enthält das Wurzel-Objekt Config_Container, das ein abgeleitetes Config_Container-Objekt enthält. Config_Container-Objekte speichern Referenzen auf Eltern-Elemente, die entsprechende Kind-Elemente in einem Array enthalten. Diese Struktur macht es einfach auf verschiedene Container und ihre Inhalte zuzugreifen.
Ein Config_Container-Objekt kann eines dieser Typen sein:
Sektionen: eine Sektion enthält andere Config_Container-Objekte.
Direktiven: eine Direktive enthält nur Inhalt und einen Namen. Sie entsprechen einem Schlüssel-Wert-Paar.
Kommentare: entsprechend Direktiven besitzen sie einen Inhalt - aber keinen Namen. Sie werden beim Schreiben entsprechend argestellt.
Blanks: sie enthalten keinen Inhalt, sondern stellen Leerzeilen dar.
Wenn Sie das Config-Package verwenden, arbeiten Sie meistens mit Config_Container-Objekten.
Einen neues Config_Container-Objekt erzeugen
<?php
// initialize a Config_Container object
require_once('Config.php');
$conf =& new Config_Container('section', 'conf');
$conf_DB =& $conf->createSection('DB');
$conf_DB->createDirective('type', 'mysql');
$conf_DB->createDirective('host', 'localhost');
$conf_DB->createDirective('user', 'root');
$conf_DB->createDirective('pass', 'root');
// set this container as our root container child in Config
$config = new Config();
$config->setRoot($conf);
// write the container to a php array
$config->writeConfig('/tmp/config_test.php', 'phparray',
array('name' => 'test'));
// print the content of our conf section to screen
echo $conf->toString('phparray', array('name' => 'test'));
?>
Das Beispiel zeigt wie Config und Config_Container zusammenarbeiten. Es gibt weitere Möglichkeiten. Sie können zuerst das Config-Objekt erzeugen und dann $config->getRoot() aufrufen, um Sektionen und Direktiven zum zurückgegebenen Objekt.
Konfigurationsdaten aus einer XML-Datei auslesen
<?php
require_once 'Config.php';
$conf = new Config;
$root =& $conf->parseConfig('config.xml', 'XML');
if (PEAR::isError($root)) {
die('Error while reading configuration: ' . $root->getMessage());
}
$settings = $root->toArray();
printf('User settings: <a href="%s">%s %s</a>',
$settings['root']['conf']['www'],
$settings['root']['conf']['firstname'],
$settings['root']['conf']['lastname']
);
?>
In diesem Beispiel kann die XML-Datei config.xml so aussehen:
<?xml version="1.0" encoding="UTF-8"?> <conf> <firstname>John</firstname> <lastname>Doe</lastname> <www>http://example.com/</www> </conf>
Weitere Information finden Sie in der API-Dokumentation, den Beispielen im Package und den Package-Testskripten. Desweiteren existiert ein gutes Tutorial für das Config-Package auf DevShield.