Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[PHP5] GESTIONNAIRE DE CONFIGURATIONS


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : poo, gestionnaire, configuration, xml Niveau : Initié Date de création : 03/06/2007 Date de mise à jour : 03/06/2007 12:05:07 Vu / téléchargé: 4 053 / 149

Note :
Aucune note

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

Description

Salut,

Comme les sources trouvées ici ne me convenaient pas, j'ai fait la mienne.
Il s'agit d'un gestionnaire de configurations simples, constituées de simples paires clé/valeur.

Il est composé d'une classe abstraite qui gère l'accès aux valeurs de la configuration, et de classes concrètes dérivées qui gèrent l'accès aux données (fichier XML, base de données, fichier .ini, etc).

Voici le code :
 

Source

  • <?php
  • /**
  • * Project : Configuration File Reader
  • * File : Config.class.php
  • *
  • * @author Neige < neige at orphyx dot net >
  • * @copyright © 2007 - Neige
  • * @package Configuration File Reader
  • * @version 1.0.0
  • * @link http://www.orphyx.net
  • * @licence http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
  • */
  • /**
  • * @package Configuration File Reader
  • */
  • abstract class Config
  • {
  • /**
  • * Configuration Items
  • * @var array
  • */
  • protected $_ConfigItems = array();
  • /**
  • * Read configuration file and store items
  • * @param string $file
  • */
  • abstract protected function _load($file);
  • /**
  • * Factory : build the required object
  • * @param string $file File to load
  • * @param string $type Required class type
  • * @return object
  • */
  • public static function getConfig($file, $type)
  • {
  • $classReq = 'Config_' . $type;
  • if(class_exists($classReq))
  • {
  • return new $classReq($file);
  • }
  • else
  • {
  • throw new Exception('CLASS_NOT_FOUND');
  • }
  • }
  • /**
  • * Class constructor
  • * Load configuration file
  • * @param string $file
  • */
  • public function __construct($file)
  • {
  • $this -> _load($file);
  • }
  • /**
  • * Configuration items getter
  • * @param string $var
  • * @return string
  • */
  • public final function __get($var)
  • {
  • if (array_key_exists($var, $this -> _ConfigItems))
  • {
  • return $this -> _ConfigItems[$var];
  • }
  • else
  • {
  • return FALSE;
  • }
  • }
  • /**
  • * Configuration items setter
  • * @param string $var
  • * @param mixed $value
  • */
  • public final function __set($var, $value)
  • {
  • $this -> _ConfigItems[$var] = $value;
  • }
  • }
  • ?>
  • <?php
  • /**
  • * Project : Configuration File Reader
  • * File : Config_MySQL.class.php
  • *
  • * @author Neige < neige at orphyx dot net >
  • * @copyright © 2007 - Neige
  • * @package Configuration File Reader
  • * @version 1.0.0
  • * @link http://www.orphyx.net
  • * @licence http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
  • */
  • /**
  • * @package Configuration File Reader
  • */
  • class Config_MySQL extends Config
  • {
  • /**
  • * Fetch configuration table content
  • * Requires a MySQL connection to exist
  • * @param string $file The table name
  • */
  • protected function _load($file)
  • {
  • if (!mysql_ping())
  • {
  • throw new Exception('NO_MYSQL_CONNECTION_FOUND');
  • }
  • $result = mysql_query('SELECT * FROM ' . $file);
  • while ($item = mysql_fetch_row($result))
  • {
  • $this -> _ConfigItems[$item[0]] = $item[1];
  • }
  • mysql_free_result($result);
  • }
  • }
  • ?>
  • <?php
  • /**
  • * Project : Configuration File Reader
  • * File : Config_SimpleXML.class.php
  • *
  • * @author Neige < neige at orphyx dot net >
  • * @copyright © 2007 - Neige
  • * @package Configuration File Reader
  • * @version 1.0.0
  • * @link http://www.orphyx.net
  • * @licence http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
  • */
  • /**
  • * @package Configuration File Reader
  • */
  • class Config_SimpleXML extends Config
  • {
  • /**
  • * Read Configuration file using SimpleXMLElement
  • * @param string $file
  • */
  • protected function _load($file)
  • {
  • if (is_file($file))
  • {
  • $xml = simplexml_load_file($file);
  • }
  • else
  • {
  • throw new Exception('FILE_NOT_FOUND');
  • }
  • foreach ($xml as $item)
  • {
  • $this -> _ConfigItems[(string) $item -> name] = (string) $item -> value;
  • }
  • unset($xml);
  • }
  • }
  • ?>
<?php

/**
 * Project : Configuration File Reader
 * File    : Config.class.php
 *
 * @author Neige < neige at orphyx dot net >
 * @copyright © 2007 - Neige
 * @package Configuration File Reader
 * @version 1.0.0
 * @link http://www.orphyx.net
 * @licence http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
 */

/**
 * @package Configuration File Reader
 */
abstract class Config
{
	/**
	 * Configuration Items
	 * @var array
	 */
	protected $_ConfigItems = array();
	
	/**
	 * Read configuration file and store items
	 * @param string $file
	 */
	abstract protected function _load($file);
	
	/**
	 * Factory : build the required object
	 * @param string $file File to load
	 * @param string $type Required class type
	 * @return object
	 */
	public static function getConfig($file, $type)
	{
		$classReq = 'Config_' . $type;
		if(class_exists($classReq))
		{
			return new $classReq($file);
		}
		else
		{
			throw new Exception('CLASS_NOT_FOUND');
		}
	}
	/**
	 * Class constructor
	 * Load configuration file
	 * @param string $file
	 */
	public function __construct($file)
	{
		$this -> _load($file);
	}
	
	/**
	 * Configuration items getter
	 * @param string $var
	 * @return string
	 */
	public final function __get($var)
	{
		if (array_key_exists($var, $this -> _ConfigItems))
		{
			return $this -> _ConfigItems[$var];
		}
		else
		{
			return FALSE;
		}
	}
	
	/**
	 * Configuration items setter
	 * @param string $var
	 * @param mixed $value
	 */
	public final function __set($var, $value)
	{
		$this -> _ConfigItems[$var] = $value;
	}
	
}

?>

<?php

/**
 * Project : Configuration File Reader
 * File    : Config_MySQL.class.php
 *
 * @author Neige < neige at orphyx dot net >
 * @copyright © 2007 - Neige
 * @package Configuration File Reader
 * @version 1.0.0
 * @link http://www.orphyx.net
 * @licence http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
 */

/**
 * @package Configuration File Reader
 */
class Config_MySQL extends Config
{
	/**
	 * Fetch configuration table content
	 * Requires a MySQL connection to exist
	 * @param string $file The table name
	 */
	protected function _load($file)
	{
		if (!mysql_ping())
		{
			throw new Exception('NO_MYSQL_CONNECTION_FOUND');
		}
		$result = mysql_query('SELECT * FROM ' . $file);
		while ($item = mysql_fetch_row($result))
		{
			$this -> _ConfigItems[$item[0]] = $item[1];
		}
		mysql_free_result($result);
	}
}

?>

<?php

/**
 * Project : Configuration File Reader
 * File    : Config_SimpleXML.class.php
 *
 * @author Neige < neige at orphyx dot net >
 * @copyright © 2007 - Neige
 * @package Configuration File Reader
 * @version 1.0.0
 * @link http://www.orphyx.net
 * @licence http://creativecommons.org/licenses/by-nc-sa/2.0/fr/
 */


/**
 * @package Configuration File Reader
 */
class Config_SimpleXML extends Config
{
	/**
	 * Read Configuration file using SimpleXMLElement
	 * @param string $file
	 */
	protected function _load($file)
	{
		if (is_file($file))
		{
			$xml = simplexml_load_file($file);
		}
		else
		{
			throw new Exception('FILE_NOT_FOUND');
		}
		
		foreach ($xml as $item)
		{
			$this -> _ConfigItems[(string) $item -> name] = (string) $item -> value;
		}
		
		unset($xml);
	}
}

?>

Conclusion

Pour l'heure, je n'ai fait que deux classes concrètes : XML (utilisation de SimpleXML) et MySQL.
Pour le stockage en base de données, la classe nécessite que la connexion MySQL soit déjà faite et considère que le fichier à charger correspond à la table à lire, et que le premier champ est la clé, le deuxième la valeur (quelques soient leurs noms). La classe MySQL ne tient pas compte d'une éventuelle classe d'abstraction pour l'accès aux données (elle est tellement élémentaire que ce n'était pas vraiment justifié) : libre à chacun de la réécrire pour aller avec sa couche d'abstraction personnelle.


Exemples d'utilisations :

$page -> conf = Config::getConfig($config_file, 'SimpleXML');
if ($page -> conf -> active)
{
    // code...
}

$board -> conf = Config::getConfig('board_config', 'MySQL');

Petite précision : pour des raisons évidentes de sécurité, il est recommandé de ne pas stocker ses fichiers de configurations (surtout des .xml ou des .ini) dans un répertoire accessible depuis le net. Le mieux étant bien sûr de les stocker dans un répertoire situé en dehors de l'arborescence de publication, sinon, dans un répertoire protégé par .htaccess

Dernier point : je me suis creusé la tête pour limiter le nombre d'objets instanciés, finalement, j'ai pas réussi, on en a un par fichier de configuration... Donc question perfs, c'est peut-être pas au point, je prends toutes les idées qui pourront être données.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

03 juin 2007 12:05:08 :
Correction d'une faute de frappe

Commentaires et avis

Aucun commentaire pour le moment.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

XML ou MySQL ?? [ par Garno ] Salut,J'aimerais savoir s'il est plus rapide d'utilise le XML ou le MySQL pour conserver la configuration de mon site web. Comme je prévois beaucoup d [PHP 5][DOM XML] Suppression du noeud courant [ par javajavajava ] Bonjour, voici comment se présente mon fichier xml&lt;?xml version="1.0" encoding="utf-8" ?&gt; &lt;menu&gt;&lt;nbelements&gt;5&lt;/nbelements&gt; &lt XML insérer un élément tout au dessus [ par Straw ] Bonjour &#224; tous, je pose cette question dans le cadre de mon m&#233;moire... que je dois rendre dans 12jours Je d&#233;veloppe un site flash-x configuration [ par khaldounaouar ] ma page (configurer le reseau.php contient (@ip,masque,DNS,et,deux boutons valider,Annuler)je veut faire une connexion entre le bouton valider et le f configuration réseau [ par walidospikkos ] salut &#224; tous, j'ai con&#231;u une interface avec php qui m'offre la possibilit&#233; de modifier l'IP, l'@ DNS et le masque de ma machine. mon in Timeout flux XML [ par FhX ] Bon, petit problème avec les flux XML récupéré via simpleXML en PHP5. Comment on défini un timeout sur ce machin ? Parce que j'ai beau essayer avec le administration réseau sous linux via PHP [ par khaldounaouar ] Salut tout le monde; bref j'ai conçu une page php "outil.php" dans le but d'administrer mon réseau(configuration des hôtes, serveurs...) qui doit fon configuration réseau via php [ par khaldounaouar ] salut tous le monde j'ai conçu une page .php que j'envisage configurer mon reseau local à travers je travaille avec php4 et apache le corps de ma p générer un fichier XML à partir de mySQL [ par Migs ] Bonjour, je voudrais savoir s'il est possible de créer un fichier XML directement à partir de mySQL par le biais de procédures stockées. Je ne souhait Aide pour mon Parser XML [ par ddpetit ] Bonjour à tous,  je suis en train de me créer un parser xml pour un de mes sites, un problème subsiste, j'ai réussi à faire le parser en lui meme, mai


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,874 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.