begin process at 2010 03 16 22:08:04
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > [PHP5] GESTIONNAIRE DE CONFIGURATIONS

[PHP5] GESTIONNAIRE DE CONFIGURATIONS


 Information sur la source

Note :
Aucune note
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 344 / 160

Auteur : neigedhiver

Ecrire un message privé
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

Les Membres Club peuvent 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

 Sources du même auteur

Source avec Zip [PHP5] LIGHTEMPLATE - MOTEUR DE TEMPLATES ULTRA-LÉGER
Source avec Zip [PHP5.1] LISTING D'UN RÉPERTOIRE AVEC FILTRES
[PHP5.1] STRING ITERATOR
Source avec Zip [PHP5] ORPHYX PLUGIN SYSTEM
Source avec Zip IMAGE BODY GUARD

 Sources de la même categorie

Source avec Zip CLASSE TABLE HTML DYNAMIQUE par LDDL
Source avec Zip GÉNÉRATEUR DE COUCHE DAO POUR SITE WEB À PARTIR D'UNE BASE D... par alexfool
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture XML DE DESCRIPTION DE DOSSIERS NAUTILUS par coucou747
CLASSE DE CONFIGURATION POUR LA GESTION D'ERREUR par FredT
Source avec Zip Source avec une capture CLASSE D'ÉDITION DES FICHIERS DE CONFIGURATION D'APACHE par LocalStone
PETIT LECTEUR DE RSS SANS PRÉTENTION ... par LocalStone
Source avec Zip CLASSE COMPLÈTE DE GESTION DES FICHIERS DE CONFIGURATION INI... par LocalStone

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...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales