Page 1 sur 1

[PHP5] ConfigLoader

Posté : 28 avr. 2006, 18:29
par Vaedan
Rebonjour. Décidemment aujourd'hui, 2 contributions, le coding va bon train !

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>
Le PHP:
// 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' ] );
		}
	}
}

Posté : 29 avr. 2006, 10:48
par zeus
Ta classe est très interessante mais afin d'utiliser des standards, j'utiise le format des fichiers ini pour mes fichiers de conf.
Après, en PHP, il existe la fonction parse_ini_file() qui permet de retourner un tableau contenant les paramètres de conf

Mais si quelqu'un préfère utiliser XML, ta fonction peut être très utile :pouce:

Posté : 29 avr. 2006, 11:16
par Vaedan
J'avais codé un pti parseur de fichier ini, ça m'avait pris 5 bonnes heures ... Après je me suis aperçu que cette fonction existait :D

Personnellement je préfère le XML au ini, de plus (il me semble), le traitement XML est plus rapide que celui du ini. Faudrait que je bench ...

Posté : 01 mai 2006, 14:57
par rami
Le problème d'un fichier XML est qu'il est très verbeux, et donc pour des configurations assez complexes, il devient très difficile de répérer certains paramètres.