Je vous présente cette fois ci une petite classe qui va, je l'espère, en ravir plus d'un. ConfigLoader va vous permettre de charger des fichiers configuration en XML, de les parser et d'obtenir un joli tableau contenant tous les paramètres. J'ai également ajouté le support de fichiers XML externes.
Le XML: test_config.xml
Code : Tout sélectionner
<!-- Ce fichier XML va nous servir dans les différents exemples -->
<config>
<vars name="host" value="localhost" />
<vars name="user" value="root" />
<vars name="pass" value="" />
<file url="http://example.com/file.xml" />
<vars name="site" value="monsite.fr" />
<vars name="port" value="80" />
</config>// Objet
$cfg = new ConfigLoader;
$cfg->load( test_config.xml );
/*
Array
(
[host] => localhost
[user] => root
[pass] =>
[site] => monsite.fr
[port] => 80
...
fichier distant
...
)
*/
La source:
class ConfigLoader
{
// ------------------------------------------------
// Internal
// ------------------------------------------------
private $config = array();
// ================================================================
// Parse le fichier XML et retourne les paramètres de configuration
// extraits.
//
// @param string Chemin du fichier XML
// @return array Configuration
// ================================================================
public function load( $file )
{
$this->load_file( $file );
return $this->config;
}
// ================================================================
// Parse le fichier XML en un objet SimpleXML.
//
// @param string Chemin du fichier XML
// ================================================================
public function load_file( $file )
{
// ------------------------------------------------
// Parse le fichier XML pour récupérer un objet
// SimpleXML structuré
// ------------------------------------------------
$cfg = simplexml_load_file( $file );
// ------------------------------------------------
// Parse l'objet SimpleXML pour récupérer les
// paramètres de configuration de le nom des autres
// fichiers.
// ------------------------------------------------
$this->parse( $cfg );
}
// ================================================================
// Parse l'objet SimpleXML pour récupérer les paramètres de
// configuration de le nom des autres fichiers.
//
// @param SimpleXMLObject Fichier XML parsé
// ================================================================
private function parse( $simplexml_object )
{
// ------------------------------------------------
// Extrait les variables
// ------------------------------------------------
$vars = $simplexml_object->xpath( '//vars[@name]' );
foreach ( $vars as $node )
{
// ------------------------------------------------
// Force le typage en 'string' pour éviter les
// conflits de type.
// ------------------------------------------------
$this->config[ (string)$node[ 'name' ] ] = (string)$node[ 'value' ];
}
// ------------------------------------------------
// Extrait les fichiers externes
// ------------------------------------------------
$externals = $simplexml_object->xpath( '//file[@url]' );
foreach ( $externals as $file )
{
// ------------------------------------------------
// Force le typage de l'URL en 'string' puis parse
// le fichier.
// ------------------------------------------------
$this->load_file( (string)$file[ 'url' ] );
}
}
}