<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://methylbro.titaxium.org/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Méthylbro Développeur Web PHP - Tag - config</title>
  <link>http://methylbro.titaxium.org/</link>
  <atom:link href="http://methylbro.titaxium.org/feed/tag/config/rss2" rel="self" type="application/rss+xml"/>
  <description>Développeur Web PHP</description>
  <language>fr</language>
  <pubDate>Wed, 08 Sep 2010 20:21:12 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>PHP : Stocker sa configuration dans un fichier XML avec WDDX</title>
    <link>http://methylbro.titaxium.org/post/2009/07/13/php-stocker-sa-configuration-dans-un-fichier-xml-avec-wddx</link>
    <guid isPermaLink="false">urn:md5:0da4040effcde9f7068a25cad8fe346b</guid>
    <pubDate>Mon, 13 Jul 2009 08:00:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Développement</category>
        <category>config</category><category>configuration</category><category>php</category><category>wddx</category><category>xml</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/arton2166-0a977-bc27b.png&quot; alt=&quot;Variables de configuration avec PHP&quot; style=&quot;float: left; margin-right: 15px;&quot; /&gt;Il y a quelques semaines, j'ai parlé longuement de la gestion des &lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/15/les-variables-de-configuration-avec-PHP&quot;&gt;variables de configuration&lt;/a&gt; au sein d'application PHP. J'ai même essayé de donner quelques pistes de réflexion en proposant un petit ensemble de classe pour stocker ces valeurs dans des fichiers .ini, dans des bases de données, ou encore dans les variables de session. &lt;/p&gt;
&lt;p&gt;Pourtant je trouvais dommage de ne pas montrer au moins un exemple utilisant XML pour stocker ces valeurs. Je vais donc corriger ca en vous proposant cet exemple aujourd'hui. Nous allons compléter nos exemples avec une petite classe qui nous permettra de stocker des variables de configuration au sein d'un fichier XML. &lt;/p&gt;    &lt;h3&gt;Le choix du format XML&lt;/h3&gt;
&lt;p&gt;Pour me simplifier la vie, lorsque je doit représenter des données en XML via un script PHP, j’aime bien utiliser WDDX. En effet, il existe une extension qui permet de sérialiser et desérialiser des données au format WDDX sans soucis.&lt;/p&gt;
&lt;p&gt;Nous allons donc utiliser les fonctions wddx_serialize_value() et wddx_deserialize() pour transformer notre tableau de valeurs en un paquet au format WDDX.&lt;/p&gt;
&lt;h3&gt;La classe WDDXFile_ConfigurationHandler&lt;/h3&gt;
&lt;p&gt;Nous allons donc créer une nouvelle classe WDDXFile_ConfigurationHandler héritant de notre classe abstraite ConfigurationHandler et implémentant l’interface iConfigurationHandler. Il nous suffira donc de rédiger uniquement les méthodes load() et save() de notre interface.&lt;/p&gt;
&lt;p&gt;Voici à quoi ressemblera la structure de notre classe :&lt;/p&gt;
&lt;code&gt;class WDDXFile_ConfigurationHandler &lt;br /&gt;
extends ConfigurationHandler &lt;br /&gt;
implements iConfigurationHandler {&lt;br /&gt;
private $file;&lt;br /&gt;
public function __construct($file, $auto=false) {}&lt;br /&gt;
public function load() {}&lt;br /&gt;
public function save() {}&lt;br /&gt;
}&lt;/code&gt;
&lt;h3&gt;La méthode load()&lt;/h3&gt;
&lt;p&gt;Pour lire le paquet WDDX contenu dans le fichier, nous allons utiliser conjointement les fonctions file_get_contents() et wddx_deserialize(). &lt;/p&gt;
&lt;p&gt;La première va récupérer le contenu du fichier et la seconde va transformer la chaîne de caractères contenant le paquet WDDX. &lt;/p&gt;
&lt;code&gt;public function load() {&lt;br /&gt;
$this-&amp;gt;setData(wddx_deserialize(file_get_contents($this-&amp;gt;file)));&lt;br /&gt;
return $this;&lt;br /&gt;
}&lt;/code&gt;
&lt;h3&gt;la méthode save()&lt;/h3&gt;
&lt;p&gt;Pour écrire notre nouveau document XML au sein de notre fichier, nous allons à l’inverse de la fonction load() utiliser les fonctions file_put_contents() et wddx_serialize() pour créer le paquet WDDX et l’écrire dans le fichier. &lt;/p&gt;
&lt;code&gt;public function save() {&lt;br /&gt;
file_put_contents($this-&amp;gt;file, wddx_serialize_value($this-&amp;gt;data));&lt;br /&gt;
return $this;&lt;br /&gt;
}&lt;/code&gt;</description>
    
          <enclosure url="http://methylbro.titaxium.org/portfolio/methylbro/public/sources/class.wddxfile_configurationhandler.rar"
      length="686" type="application/rar" />
    
    
          <comments>http://methylbro.titaxium.org/post/2009/07/13/php-stocker-sa-configuration-dans-un-fichier-xml-avec-wddx#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2009/07/13/php-stocker-sa-configuration-dans-un-fichier-xml-avec-wddx#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/339</wfw:commentRss>
      </item>
    
  <item>
    <title>PHP : Stocker sa configuration dans une session</title>
    <link>http://methylbro.titaxium.org/post/2009/06/25/PHP-%3A-Stocker-sa-configuration-dans-une-session</link>
    <guid isPermaLink="false">urn:md5:f34ba257ea9b57fda87c854fe90210e6</guid>
    <pubDate>Thu, 25 Jun 2009 08:30:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Tutoriels</category>
        <category>config</category><category>configuration</category><category>php</category><category>session</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/arton2166-0a977-bc27b.png&quot; alt=&quot;Les variables de configuration avec PHP&quot; style=&quot;float: left; margin-right: 15px;&quot; /&gt;De prime abord, cette idée peut paraitre saugrenue. Quelle peut être l'intérêt de stocker des &lt;strong&gt;variables de configuration&lt;/strong&gt; au sein d'une session ?&lt;/p&gt;
&lt;p&gt;J'avoue que je n'en ai absolument aucune idée. Ne me jetez pas la pierre, je cherchais juste un bon exemple pour montrer que l'on peut enregistrer des &lt;strong&gt;variables de configuration&lt;/strong&gt; n'importe ou avec un minimum d'abstraction.&lt;/p&gt;    &lt;p&gt;De prime abord, cette idée peut paraitre saugrenue. Quelle peut être l'intérêt de stocker des &lt;strong&gt;variables de configuration&lt;/strong&gt; au sein d'une session ?&lt;/p&gt;
&lt;p&gt;J'avoue que je n'en ai absolument aucune idée. Ne me jetez pas la pierre, je cherchais juste un bon exemple pour montrer que l'on peut enregistrer des &lt;strong&gt;variables de configuration&lt;/strong&gt; n'importe ou avec un minimum d'abstraction.&lt;/p&gt;
&lt;h3&gt;La classe Session_ConfigurationHandler&lt;/h3&gt;
&lt;code&gt;
class Session_ConfigurationHandler extends ConfigurationHandler implements iConfigurationHandler {&lt;br /&gt;
&lt;br /&gt;
private $array_access;&lt;br /&gt;
&lt;br /&gt;
public function __construct($array_access, $auto=null) {&lt;br /&gt;
parent::__construct($auto);&lt;br /&gt;
&lt;br /&gt;
if (strlen(session_id())&amp;lt;=0) throw new Exception('need a valid SID resource');&lt;br /&gt;
$r = (!session_is_registered($array_access))&lt;br /&gt;
? (session_register($array_access))&lt;br /&gt;
? true&lt;br /&gt;
: new Exception('failed to define \''.$array_access.'\'')&lt;br /&gt;
: new Exception('\''.$array_access.'\' is already defined');&lt;br /&gt;
if ($r instanceof Exception) throw $r;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function load() {&lt;br /&gt;
$this-&amp;gt;setData($_SESSION[$this-&amp;gt;array_access]);&lt;br /&gt;
return $this;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function save() {&lt;br /&gt;
$_SESSION[$this-&amp;gt;array_access] = $this-&amp;gt;getData();&lt;br /&gt;
return $this;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}
&lt;/code&gt;</description>
    
          <enclosure url="http://methylbro.titaxium.org/portfolio/methylbro/public/sources/class.session_configurationhandler.rar"
      length="497" type="application/rar" />
    
    
          <comments>http://methylbro.titaxium.org/post/2009/06/25/PHP-%3A-Stocker-sa-configuration-dans-une-session#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2009/06/25/PHP-%3A-Stocker-sa-configuration-dans-une-session#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/295</wfw:commentRss>
      </item>
    
  <item>
    <title>PHP : Stocker sa configuration dans une base de données</title>
    <link>http://methylbro.titaxium.org/post/2009/06/23/php-stocker-sa-configuration-dans-une-base-de-donnees</link>
    <guid isPermaLink="false">urn:md5:a697e172da80e81bf881a5c7adf2d6e7</guid>
    <pubDate>Tue, 23 Jun 2009 08:30:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Tutoriels</category>
        <category>base de données</category><category>config</category><category>configuration</category><category>php</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/bdd.png&quot; alt=&quot;Stocker ses variable de configuration PHP dans une Base de Données&quot; style=&quot;float: left; margin-right: 15px;&quot; /&gt;Nous venons de voir dans un billet précédant comment manipuler facilement des &lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/15/les-variables-de-configuration-avec-PHP&quot;&gt;variables de configuration&lt;/a&gt; à l'aide d'un &lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/21/php-stocker-sa-configuration-dans-un-fichier-ini&quot;&gt;fichier .ini&lt;/a&gt;. Mais comme je l'ai expliqué dans le &lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/15/les-variables-de-configuration-avec-PHP&quot;&gt;billet d'introduction&lt;/a&gt; à ce sujet, dans certains cas nous pourrions très bien vouloir stocker autrement ces informations.&lt;/p&gt;
&lt;p&gt;Aujourd'hui nous allons voir comment, avec la même méthodologie, avec les mêmes &lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/19/php-enregistrer-et-stocker-des-variables-de-configuration&quot;&gt;classes et interfaces&lt;/a&gt; de base nous pouvons étendre notre petite librairie à l'utilisation de &lt;strong&gt;base de données&lt;/strong&gt;.&lt;/p&gt;    &lt;h3&gt;La classe DataBase_ConfigurationHandler&lt;/h3&gt;
&lt;p&gt;Pour ce faire, il faudra indiquer à la classe &lt;em&gt;Configuration&lt;/em&gt; comment elle doit lire et enregistrer les informations qu'elle manipule. &lt;/p&gt;
&lt;p&gt;Il suffit donc de reprendre la classe abstraite &lt;em&gt;ConfigurationHandler&lt;/em&gt; au sein d'une nouvelle classe (que nous appellerons ici &lt;em&gt;DataBase_ConfigurationHandler&lt;/em&gt;) et de lui implémenter également les méthodes de l'interface &lt;em&gt;iConfigurationHandler&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;On se retrouve donc avec un nouvel objet de type &lt;em&gt;ConfigurationHandler&lt;/em&gt; capable de lire et d'écrire dans une base de données.&lt;/p&gt;
&lt;code&gt;
class DataBase_ConfigurationHandler extends ConfigurationHandler implements iConfigurationHandler {&lt;br /&gt;
&lt;br /&gt;
private $column_name;&lt;br /&gt;
private $column_value;&lt;br /&gt;
private $table;&lt;br /&gt;
private $_PDO;&lt;br /&gt;
&lt;br /&gt;
public function __construct($colname, $colvalue, $table, $PDO, $auto=false) {&lt;br /&gt;
parent::__construct($auto);&lt;br /&gt;
$this-&amp;gt;column_name = $colname;&lt;br /&gt;
$this-&amp;gt;column_value = $colvalue;&lt;br /&gt;
$this-&amp;gt;table = $table;&lt;br /&gt;
$this-&amp;gt;_PDO = $PDO;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function load() {&lt;br /&gt;
$sql = &quot;SELECT `&quot;.$this-&amp;gt;column_name.&quot;`, `&quot;.$this-&amp;gt;column_value.&quot;` &quot;&lt;br /&gt;
. &quot;FROM `&quot;.$this-&amp;gt;table.&quot;`;&quot;;&lt;br /&gt;
$PDOStatement = $this-&amp;gt;_PDO-&amp;gt;query($sql);&lt;br /&gt;
while($row = $PDOStatement-&amp;gt;fetch(PDO::FETCH_ASSOC)) {&lt;br /&gt;
$this-&amp;gt;setData($row[$this-&amp;gt;column_name], $this-&amp;gt;column_value);&lt;br /&gt;
}&lt;br /&gt;
return $this;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function save() {&lt;br /&gt;
$arr = array();&lt;br /&gt;
$sql = &quot;TRUNCATE TABLE `&quot;.$this-&amp;gt;table.&quot;`;&quot;;&lt;br /&gt;
$this-&amp;gt;_PDO-&amp;gt;exec($sql);&lt;br /&gt;
$sql = &quot;INSERT INTO `&quot;.$this-&amp;gt;table.&quot;` &quot;&lt;br /&gt;
. &quot;(`&quot;.$this-&amp;gt;column_name.&quot;`, `&quot;.$this-&amp;gt;column_value.&quot;`) VALUES &quot;;&lt;br /&gt;
foreach($this-&amp;gt;data as $name =&amp;gt; $value) $arr[] = &quot;('&quot;.$name.&quot;', '&quot;.$value.&quot;')&quot;;&lt;br /&gt;
$sql.= implode(', ', $arr);&lt;br /&gt;
$this-&amp;gt;_PDO-&amp;gt;exec($sql);&lt;br /&gt;
return $this;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}
&lt;/code&gt;
&lt;h3&gt;La table CONFIGURATION&lt;/h3&gt;
&lt;p&gt;Dans un second temps nous allons créer une table simple au sein d'une base de données qui contiendra les valeurs de chaque variables de configuration que nous allons utiliser :&lt;/p&gt;
&lt;code&gt;
CREATE TABLE `CONFIGURATION` (&lt;br /&gt;
`name` varchar(255) NOT NULL,&lt;br /&gt;
`value` blob NULL,&lt;br /&gt;
PRIMARY KEY (`name`)&lt;br /&gt;
)TYPE=MyISAM;&lt;br /&gt;
&lt;br /&gt;
INSERT INTO `CONFIGURATION` (`name`, `value`) VALUES ('bonjour', 'hello world !'), ('foo', 'bar');
&lt;/code&gt;
&lt;h3&gt;Exemple d'utilisation&lt;/h3&gt;
&lt;p&gt;Pour finir il ne reste plus qu'a utiliser notre nouvelle classe. Rien de plus simple car grâce au l'interface &lt;em&gt;iConfigurationHandler&lt;/em&gt; c'est toujours les mêmes méthodes que l'on utilise. &lt;/p&gt;
&lt;code&gt;
$PDO = new PDO();&lt;br /&gt;
$maMethode = new DataBase_ConfigurationHandler('name', 'value', 'CONFIGURATION', $PDO);&lt;br /&gt;
$maConfiguration = new Configuration($maMethode);&lt;br /&gt;
&lt;br /&gt;
echo $maConfiguration-&amp;gt;bonjour;&lt;br /&gt;
/*&lt;br /&gt;
* Affichera :&lt;br /&gt;
* hello world !&lt;br /&gt;
*/&lt;br /&gt;
echo $maConfiguration-&amp;gt;foo;&lt;br /&gt;
/*&lt;br /&gt;
* Affichera :&lt;br /&gt;
* bar&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
$maConfiguration-&amp;gt;bonjour = 'coucou !';&lt;br /&gt;
$maMethode-&amp;gt;save();&lt;br /&gt;
&lt;/code&gt;
&lt;p&gt;&lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/25/PHP-%3A-Stocker-sa-configuration-dans-une-session&quot;&gt;Lire la suite&lt;/a&gt;&lt;/p&gt;</description>
    
          <enclosure url="http://methylbro.titaxium.org/portfolio/methylbro/public/sources/class.database_configurationhandler.rar"
      length="623" type="application/rar" />
    
    
          <comments>http://methylbro.titaxium.org/post/2009/06/23/php-stocker-sa-configuration-dans-une-base-de-donnees#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2009/06/23/php-stocker-sa-configuration-dans-une-base-de-donnees#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/294</wfw:commentRss>
      </item>
    
  <item>
    <title>PHP : Stocker sa configuration dans un fichier ini</title>
    <link>http://methylbro.titaxium.org/post/2009/06/21/php-stocker-sa-configuration-dans-un-fichier-ini</link>
    <guid isPermaLink="false">urn:md5:15e240d313fa1336a90ab095c1a9ef34</guid>
    <pubDate>Sun, 21 Jun 2009 08:30:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Tutoriels</category>
        <category>config</category><category>configuration</category><category>ini</category><category>php</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/arton2166-0a977-bc27b.png&quot; alt=&quot;Les variables de configuration avec PHP&quot; style=&quot;float: left; margin-right: 15px;&quot; /&gt;Maintenant que vous savez comment gérer vos &lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/15/les-variables-de-configuration-avec-PHP&quot;&gt;variables de configuration en PHP&lt;/a&gt; avec une classe et que vous êtes capable de &lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/19/PHP-Enregistrer-et-stocker-des-variables-de-configuration&quot;&gt;stocker&lt;/a&gt; ces dernières de différentes manière. Nous allons voir comment les enregistrer au sein d'un &lt;strong&gt;fichier ini&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Comme je l'ai déjà dit, ce format sera plus efficace, car l'on pourra lire et écrire plus facilement les données concernées.&lt;/p&gt;    &lt;p&gt;Nous allons voir aujourd'hui un exemple de classe héritant de la classe abstraite &lt;em&gt;ConfigurationHandler&lt;/em&gt; ainsi que l'interface &lt;em&gt;iConfigurationHandler&lt;/em&gt; que nous avons déjà vu dans un billet précédant. &lt;/p&gt;
&lt;p&gt;Il suffit juste d'indiquer comment doivent se lire et s'enregistrer les différentes variables de configuration dans le fichier &lt;em&gt;.ini&lt;/em&gt;.&lt;/p&gt;
&lt;code&gt;
class IniFile_ConfigurationHandler extends ConfigurationHandler implements iConfigurationHandler {&lt;br /&gt;
&lt;br /&gt;
private $file;&lt;br /&gt;
&lt;br /&gt;
public function __construct($file, $auto=false) {&lt;br /&gt;
parent::__construct($auto);&lt;br /&gt;
$r = (file_exists($file) &amp;amp;&amp;amp; is_file($file))&lt;br /&gt;
? (is_readable($file) &amp;amp;&amp;amp; is_writable($file))&lt;br /&gt;
? $this-&amp;gt;file = $file&lt;br /&gt;
: new Exception('failed to open stream: Permission denied')&lt;br /&gt;
: new Exception('failed opening \''.$file.'\': No such file');&lt;br /&gt;
if ($r instanceof Exception) throw $r;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function load() {&lt;br /&gt;
$this-&amp;gt;setData(parse_ini_file($this-&amp;gt;file, false));&lt;br /&gt;
return $this;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function save() {&lt;br /&gt;
$str = null;&lt;br /&gt;
foreach($this-&amp;gt;data as $name =&amp;gt; $value) {&lt;br /&gt;
$str.= $name.' = '. ((is_int($value))&lt;br /&gt;
? $value&lt;br /&gt;
: (is_bool($value))&lt;br /&gt;
? ($value) ? 'On' : 'Off'&lt;br /&gt;
: '&quot;'.$value.'&quot;').PHP_EOL;&lt;br /&gt;
}&lt;br /&gt;
file_put_contents($this-&amp;gt;file, $str);&lt;br /&gt;
return $this;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}
&lt;/code&gt;&lt;p&gt;Ainsi, pour dire à notre classe &lt;em&gt;Configuration&lt;/em&gt; qu'elle doit lire et enregistrer ses valeurs dans le fichier &lt;em&gt;config.ini&lt;/em&gt;, nous l'utiliserons désormais de la façon suivante :&lt;/p&gt;
&lt;code&gt;
$maMethode = new IniFile_ConfigurationHandler('config.ini');&lt;br /&gt;
$maConfiguration = new Configuration($maMethode);&lt;br /&gt;
&lt;br /&gt;
$maConfiguration-&amp;gt;maVariable = 'Hello World !'; &lt;br /&gt;
$maConfiguration-&amp;gt;foo = 'bar';&lt;br /&gt;
&lt;br /&gt;
$maMethode-&amp;gt;save();
&lt;/code&gt;
&lt;p&gt;&lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/23/php-stocker-sa-configuration-dans-une-base-de-donnees&quot;&gt;Lire la suite&lt;/a&gt;&lt;/p&gt;</description>
    
          <enclosure url="http://methylbro.titaxium.org/portfolio/methylbro/public/sources/class.inifile_configurationhandler.rar"
      length="606" type="application/rar" />
    
    
          <comments>http://methylbro.titaxium.org/post/2009/06/21/php-stocker-sa-configuration-dans-un-fichier-ini#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2009/06/21/php-stocker-sa-configuration-dans-un-fichier-ini#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/293</wfw:commentRss>
      </item>
    
  <item>
    <title>PHP : Enregistrer et stocker des variables de configuration</title>
    <link>http://methylbro.titaxium.org/post/2009/06/19/php-enregistrer-et-stocker-des-variables-de-configuration</link>
    <guid isPermaLink="false">urn:md5:6e7ad4f32f9a9ec8cc5fcc4066dd50ff</guid>
    <pubDate>Fri, 19 Jun 2009 08:30:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Tutoriels</category>
        <category>classe</category><category>config</category><category>configuration</category><category>php</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/arton2166-0a977-bc27b.png&quot; alt=&quot;Gestion des variables de configuration en POO avec PHP&quot; style=&quot;float: left; margin-right: 15px;&quot; /&gt;Après avoir commencé à vous parler des &lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/15/les-variables-de-configuration-avec-PHP&quot;&gt;variables de configuration avec PHP&lt;/a&gt; lundi, billet que j'ai illustré mercredi avec un exemple de &lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/17/php-gerer-vos-variables-de-configuration-avec-une-classe&quot;&gt;classe de configuration en php&lt;/a&gt;, nous allons continuer aujourd'hui sur le même sujet.&lt;/p&gt;
&lt;p&gt;Comment résoudre de façon générique l'enregistrement et le stockage de ces &lt;strong&gt;variables de configuration&lt;/strong&gt; ?&lt;/p&gt;    &lt;p&gt;Maintenant que nous avons vu comment gérer et manipuler des &lt;strong&gt;variables de configuration&lt;/strong&gt; avec PHP, nous allons pouvoir nous pencher sur les différentes façon possible d'enregistrer et de stocker ces valeurs.&lt;/p&gt;
&lt;p&gt;Comme je l'ai expliqué lors de l'introduction, le nombre de méthodes et d'outils possible pour enregistrer ses valeurs est potentiellement illimité. Ainsi donc, au lieu de créer une classe qui nous limiterais uniquement à l'une de ces méthodes, nous allons utilisée une interface commune pour chacune de ces méthodes. Libre ensuite au développeur de choisir la méthode de son choix parmi celles que nous allons voir, ou tout simplement d'écrire la sienne.&lt;/p&gt;
&lt;p&gt;Chaque méthode de stockage sera représenté par sa propre classe dans le script. Cependant afin d'unifier et normaliser ces classes, nous utiliserons une interface ainsi qu'une classe abstraite. &lt;/p&gt;
&lt;h3&gt;L'interface iConfigurationHandler&lt;/h3&gt;
&lt;p&gt;Commençons par &lt;strong&gt;l'interface&lt;/strong&gt; ; que nous appellerons &lt;em&gt;iConfigurationHandler&lt;/em&gt;. Les méthodes qui seront communes à tous nos moyens de stockages seront &lt;em&gt;load()&lt;/em&gt; et &lt;em&gt;save()&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;La première, &lt;em&gt;load()&lt;/em&gt;, nous permet de lire et placer en mémoire l'ensemble des données de configuration. Tandis que comme son nom l'indique la seconde, &lt;em&gt;save()&lt;/em&gt;, enregistrera la liste des variables en mémoire en utilisant le système de stockage concerné.&lt;/p&gt;
&lt;code&gt;
interface iConfigurationHandler {&lt;br /&gt;
public function save();&lt;br /&gt;
public function load();&lt;br /&gt;
}
&lt;/code&gt;
&lt;h3&gt;La classe abstraite ConfigurationHandler&lt;/h3&gt;
&lt;p&gt;Nous allons décider que, en plus d'implémenter l'interface &lt;em&gt;iConfigurationHandler&lt;/em&gt; (et donc de proposer obligatoirement les méthodes &lt;em&gt;load()&lt;/em&gt; et &lt;em&gt;save()&lt;/em&gt;) nos différents moyens de stockage seront également manipulables avec certaines méthodes et  propriétés communes.&lt;/p&gt;
&lt;p&gt;Pour cela nous devrons donc définir une classe mère, qui sera &lt;strong&gt;abstraite&lt;/strong&gt; (et donc non directement instanciable) que nous appellerons &lt;em&gt;ConfigurationHandler&lt;/em&gt;.&lt;/p&gt;
&lt;code&gt;
abstract class ConfigurationHandler {&lt;br /&gt;
protected $data=Array();&lt;br /&gt;
protected $auto;&lt;br /&gt;
public function __construct($auto) {}&lt;br /&gt;
public function __destruct() {}&lt;br /&gt;
public function setData() {}&lt;br /&gt;
public function delData() {}&lt;br /&gt;
public function getData() {}&lt;br /&gt;
}
&lt;/code&gt;
&lt;p&gt;Au final donc, nos objets permettant le stockage de nos &lt;strong&gt;variables de configuration&lt;/strong&gt; devront à la fois hériter de la classe &lt;em&gt;ConfigurationHandler&lt;/em&gt; mais également implémenter les méthodes de l'interface &lt;em&gt;iConfigurationHandler&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Modifications sur la classe Configuration&lt;/h3&gt;
&lt;p&gt;Il faut maintenant signaler à la classe &lt;em&gt;Configuration&lt;/em&gt; qu'elle soit déléguer son stockage des données à une classe de type &lt;em&gt;ConfigurationHandler&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Voici donc les modifications à apporter sur cette dernière :&lt;/p&gt;
&lt;code&gt;
class Configuration implements IteratorAggregate, Countable, ArrayAccess {&lt;br /&gt;
private $_ConfigurationHandler;&lt;br /&gt;
public function __construct(ConfigurationHandler $ConfigurationHandler) {}&lt;br /&gt;
public function __set($name, $value) {}&lt;br /&gt;
public function __get($name) {}&lt;br /&gt;
public function __isset($name) {}&lt;br /&gt;
public function __unset($name) {}&lt;br /&gt;
public function count() {}&lt;br /&gt;
public function getIterator() {}&lt;br /&gt;
public function offsetExists($offset) {}&lt;br /&gt;
public function offsetGet($offset) {}&lt;br /&gt;
public function offsetSet($offset, $value) {}&lt;br /&gt;
public function offsetUnset($offset) {}&lt;br /&gt;
}
&lt;/code&gt;
&lt;p&gt;Dans un prochain billet, nous verrons comment utiliser ces classes abstraites et ces interfaces pour créer nos propres méthodes de stockages. D'abord dans un fichier au format &lt;em&gt;.ini&lt;/em&gt;, ensuite dans une base de données et enfin au sein des données de session du visiteur.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/21/php-stocker-sa-configuration-dans-un-fichier-ini&quot;&gt;Lire la suite&lt;/a&gt;&lt;/p&gt;</description>
    
          <enclosure url="http://methylbro.titaxium.org/portfolio/methylbro/public/sources/class.configuration-2.rar"
      length="436" type="application/rar" />
          <enclosure url="http://methylbro.titaxium.org/portfolio/methylbro/public/sources/class.configurationhandler.rar"
      length="511" type="application/rar" />
          <enclosure url="http://methylbro.titaxium.org/portfolio/methylbro/public/sources/interface.iconfigurationhandler.rar"
      length="196" type="application/rar" />
    
    
          <comments>http://methylbro.titaxium.org/post/2009/06/19/php-enregistrer-et-stocker-des-variables-de-configuration#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2009/06/19/php-enregistrer-et-stocker-des-variables-de-configuration#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/292</wfw:commentRss>
      </item>
    
  <item>
    <title>PHP : Gérer vos variables de configuration avec une classe</title>
    <link>http://methylbro.titaxium.org/post/2009/06/17/php-gerer-vos-variables-de-configuration-avec-une-classe</link>
    <guid isPermaLink="false">urn:md5:99e78640e75b6c82a1c35db3cd71291a</guid>
    <pubDate>Wed, 17 Jun 2009 08:30:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Tutoriels</category>
        <category>class</category><category>config</category><category>configuration</category><category>php</category>    
    <description>&lt;p&gt;Voici la suite du billet de lundi sur la &lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/15/les-variables-de-configuration-avec-PHP&quot;&gt;gestion des variables de configuration&lt;/a&gt; au sein d’une application avec PHP.&lt;/p&gt;
&lt;p&gt;Aujourd’hui nous allons rentrer dans le vif du sujet avec un premier exemple simple mais utilisant tout de même la surcharge ainsi que la &lt;acronym title=&quot;Standard PHP Library&quot;&gt;SPL&lt;/acronym&gt;.&lt;/p&gt;
&lt;p&gt;Cependant je garde pour plus tard toute la partie concernant l'enregistrement et le stockage de ces variables.&lt;/p&gt;    &lt;p&gt;Dans un premier temps, nous allons voir comment manipuler un ensemble de variables de configuration au sein de votre application. Sans ce soucier pour le moment des méthodes qui seront utilisées pour enregistrés ou lire les données enregistrés (dans un fichier ou une base de données par exemple).&lt;/p&gt;
&lt;p&gt;Parton donc du principe que nous souhaiterons pouvoir manipuler les données de configuration de la manière suivante :&lt;/p&gt;
&lt;code&gt;
$maConfiguration = new Configuration();&lt;br /&gt;
$maConfiguration-&amp;gt;maVariable1 = 'ma valeur';&lt;br /&gt;
$maConfiguration-&amp;gt;maVariable2 = 'mon autre valeur';&lt;br /&gt;
&lt;br /&gt;
foreach ($maConfiguration as $variable =&amp;gt; $valeur) {&lt;br /&gt;
echo $variable.' = '.$valeur.PHP_EOL;&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
* Affichera :&lt;br /&gt;
* maVariable1 = ma valeur&lt;br /&gt;
* maVariable2 = mon autre valeur&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
echo $maConfiguration['maVariable1'];&lt;br /&gt;
/*&lt;br /&gt;
* Affichera :&lt;br /&gt;
* ma valeur&lt;br /&gt;
*/
&lt;/code&gt;
&lt;p&gt;Pour se faire, nous allons devoir commencer par créer la classe &lt;em&gt;Configuration&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Afin de pouvoir offrir à notre classe les comportements que nous venons de voir, nous allons utiliser des concepts courant en Programmation Orienté Objet : la surcharge et l'itérateur (enfin ici il ne s'agit pas d'un itérateur à proprement parler).&lt;/p&gt;
&lt;p&gt;La surcharge, et ici la surcharge de propriétés, va nous permettre de redéfinir le comportement par défaut de php lorsqu'on fait appel en lecture et/ou écriture sur une propriété de notre objet. Je vous laisse lire le chapitre consacré à ce concept dans la documentation PHP : &lt;a href=&quot;http://fr.php.net/manual/fr/language.oop5.overloading.php&quot; target=&quot;_blank&quot;&gt;Les classes et les objets (PHP 5) : Surcharge&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ensuite, nous utiliserons les facilités apportées par la SPL comme par exemple l'interface IteratorAggregate qui nous permettra de manipuler notre objet comme un tableau dans les boucles foreach. Ou encore l'interface ArrayAccess qui nous permettra d'accéder au contenu de notre objet comme un tableau. Si vous n'avez encore jamais entendu parler de la Standard PHP Library, je vous laisse la découvrir : &lt;a href=&quot;http://www.php.net/%7Ehelly/php/ext/spl/&quot; target=&quot;_blank&quot;&gt;SPL Stantard PHP Library&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;La classe Configuration&lt;/h3&gt;
&lt;p&gt;Voici donc, dans sa forme la plus basique à quoi ressemble notre classe &lt;em&gt;Configuration&lt;/em&gt; dans sa forme primaire.&lt;/p&gt;
&lt;code&gt;
class Configuration implements IteratorAggregate, Countable, ArrayAccess {&lt;br /&gt;
private $data=Array();&lt;br /&gt;
public function __get($name) {}&lt;br /&gt;
public function __set($name, $value) {}&lt;br /&gt;
public function __isset($name) {}&lt;br /&gt;
public function __unset($name) {}&lt;br /&gt;
public function count() {}&lt;br /&gt;
public function getIterator() {}&lt;br /&gt;
public function offsetExists($offset) {}&lt;br /&gt;
public function offsetGet($offset) {}&lt;br /&gt;
public function offsetSet($offset) {}&lt;br /&gt;
public function offsetUnset($offset) {}&lt;br /&gt;
}
&lt;/code&gt;
&lt;p&gt;Vous trouverez l'intégralité de la classe en exemple dans le fichier en annexe à ce billet.&lt;/p&gt;
&lt;p&gt;Comme je l'ai expliqué, pour le moment nous ne nous sommes pas préoccupés de la façon dont les données seront enregistrées et stockées. Nous verrons ca dans les prochains billets. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/19/php-enregistrer-et-stocker-des-variables-de-configuration&quot;&gt;Lire la suite&lt;/a&gt;&lt;/p&gt;</description>
    
          <enclosure url="http://methylbro.titaxium.org/portfolio/methylbro/public/sources/class.configuration.rar"
      length="395" type="application/rar" />
    
    
          <comments>http://methylbro.titaxium.org/post/2009/06/17/php-gerer-vos-variables-de-configuration-avec-une-classe#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2009/06/17/php-gerer-vos-variables-de-configuration-avec-une-classe#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/291</wfw:commentRss>
      </item>
    
  <item>
    <title>Les variables de configuration avec PHP</title>
    <link>http://methylbro.titaxium.org/post/2009/06/15/les-variables-de-configuration-avec-PHP</link>
    <guid isPermaLink="false">urn:md5:7b10f658cb8e4c1f7943d35e49b6c027</guid>
    <pubDate>Mon, 15 Jun 2009 08:30:00 +0200</pubDate>
    <dc:creator>Méthylbro</dc:creator>
        <category>Tutoriels</category>
        <category>config</category><category>configuration</category><category>php</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://methylbro.titaxium.org/portfolio/methylbro/public/images/arton2166-0a977-bc27b.png&quot; alt=&quot;Couteau Suisse&quot; style=&quot;float: left; margin-right: 15px;&quot; /&gt;Lors du développement d'application web ou de site internet un minimum complexes, certaines problématiques sont récurrentes. La gestion des utilisateurs, la gestion d'un cache et plein d'autre encore.&lt;/p&gt;
&lt;p&gt;Ici, je vais vous parler d'un point sur lequel je me suis penché récemment : &lt;strong&gt;la gestion de variable de configuration&lt;/strong&gt; au sein de votre application. &lt;/p&gt;
&lt;p&gt;Il s'agit en fait d'un billet d'introduction à une série d'article un peu similaire à celle de l'année dernière sur la &lt;a href=&quot;http://methylbro.titaxium.org/post/2008/04/13/Introduction-a-la-POO-avec-PHP&quot;&gt;POO avec PHP&lt;/a&gt;. Nous verrons ainsi tout au long de la semaine comment, grâce à la &lt;strong&gt;Programmation Orienté Objet&lt;/strong&gt;, on peut résoudre cette impératif technique qui est le stockage et le traitement de &lt;strong&gt;variables de configuration&lt;/strong&gt; au sein d'une application PHP.&lt;/p&gt;    &lt;h3&gt;Qu'est-ce que j'entends par &quot;variable de configuration&quot;  ?&lt;/h3&gt;
&lt;p&gt;Et bien de façon générale, si l'on en croit la wikipédia, il s'agit des &lt;q&gt;paramètres qui permettent d'adapter leur comportement à la configuration dans lequel votre application est implantée&lt;/q&gt;.&lt;/p&gt;
&lt;p&gt;Vous retrouverez donc par exemple parmi ces paramètres des valeurs comme les identifiants de connexion à votre base de données (adresse du serveur, login, mot de passe, etc), la liste des adresses emails destinataire d'un formulaire de contact ou encore la liste des fonctionnalités activées et/ou désactivées.&lt;/p&gt;
&lt;p&gt;Les exemples peuvent être nombreux, mais le fait est que toute application possède un minimum de variables de &quot;configuration&quot;.&lt;/p&gt;
&lt;h3&gt;Comment stocker et gérer ses variables ?&lt;/h3&gt;
&lt;p&gt;Il n'existe bien évidement pas de méthodes, de procédures prédéfini pour stocker et manipuler ces variables de configuration. Le nombre de possibilités techniques pour résoudre cette contrainte est égal au nombre de développeurs. C'est a dire ; à chaque développeur sa méthode.&lt;/p&gt;
&lt;p&gt;Cependant quelques modèles génériques émergent : &lt;/p&gt;
&lt;h4&gt;Les fichiers de configuration &lt;/h4&gt;
&lt;p&gt;Le plus généralement, les &lt;strong&gt;variables de configuration&lt;/strong&gt; sont centralisés au sein d'un fichier. Se pose alors le choix du type de fichier utilisé par le développeur.&lt;/p&gt;
&lt;p&gt;Cette méthode présente plusieurs avantages. Les accès disques sont maitrisés par le développeur. Il est facile de gérer différentes versions du fichier de configuration.&lt;/p&gt;
&lt;h5&gt;le fichier de configuration .php&lt;/h5&gt;
&lt;p&gt;C'est la méthode la plus simple et la plus courante. Stocker ses valeurs directement dans un fichier de configuration en php. C'est le grand classique du &lt;em&gt;config.php&lt;/em&gt;. On trouvera donc un fichier .php un peut comme ceci :&lt;/p&gt;
&lt;code&gt;
&amp;lt;?php&lt;br /&gt;
$db_host = 'localhost';&lt;br /&gt;
$db_user = 'root';&lt;br /&gt;
$db_pass = '';&lt;br /&gt;
$db_name = 'test';&lt;br /&gt;
?&amp;gt;
&lt;/code&gt;
&lt;p&gt;L'inconvénient de cette méthode, c'est qu'il devient très difficile de modifier dynamiquement ces valeurs. Il sera par exemple très coûteux en ressources et en code de créer une interface web pour venir modifier le contenu de ce fichier avec de joli formulaire et tout.&lt;/p&gt;
&lt;h5&gt;le fichier de configuration .ini, .xml et autres formats&lt;/h5&gt;
&lt;p&gt;Toujours dans le même principe que le fichier de configuration en php, on retrouve d'autres formats. Comme par exemple le format .ini qui permet grâce à la fonction php &lt;a href=&quot;http://www.php.net/manual/fr/function.parse-ini-file.php&quot; target=&quot;_blank&quot;&gt;parse_ini_file()&lt;/a&gt; de lire très facilement sont contenu.&lt;/p&gt;
&lt;code&gt;
[DATABASE]&lt;br /&gt;
db_host = &quot;localhost&quot;&lt;br /&gt;
db_user = &quot;root&quot;&lt;br /&gt;
db_pass = &quot;&quot;&lt;br /&gt;
db_name = &quot;test&quot;
&lt;/code&gt;
&lt;p&gt;Bien évidement, si vous souhaitez utiliser un fichier pour stocker vos données de configuration un grand nombre de format de fichiers s'offre à vous. Vous pourrez alors sérialiser vos données avec &lt;a href=&quot;http://www.php.net/manual/fr/function.serialize.php&quot; target=&quot;_blank&quot;&gt;serialize&lt;/a&gt; dans un fichier quelconque.&lt;/p&gt;
&lt;p&gt;Ou encore utiliser le format xml. Soit avec un doctype personnalisé, soit en utilisant par exemple WDDX. &lt;/p&gt;
&lt;h4&gt;Les autres méthodes&lt;/h4&gt;
&lt;p&gt;Bien évidement il n'y a pas que les fichiers qui sont a même de stocker vos valeurs de configuration. Si vous avez à modifier régulièrement ces informations l'utilisation d'une base de données peut s'avérer par exemple plus utile.&lt;/p&gt;
&lt;p&gt;Mais on peut encore imaginer bien d'autres forme de stockage. Pourquoi pas dans une base de registre, dans un annuaire, ou encore sur une boite mail (oui, on peut vraiment tout imaginer).&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Vos applications doivent adapter leur comportement à la configuration dans laquelle elles sont implantées. Cela passe donc par une véritable gestion des valeurs qui permettent d'ajuster votre application en fonction de son environnement.&lt;/p&gt;
&lt;p&gt;Nous verrons dans une série de tutoriels à venir que grâce à la &lt;strong&gt;programmation orienté objet en php&lt;/strong&gt; on peut résoudre très facile les différentes contraintes technique relative au stockage et au traitement de ces &lt;strong&gt;variables de configuration&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://methylbro.titaxium.org/post/2009/06/17/php-gerer-vos-variables-de-configuration-avec-une-classe&quot;&gt;Lire la suite&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://methylbro.titaxium.org/post/2009/06/15/les-variables-de-configuration-avec-PHP#comment-form</comments>
      <wfw:comment>http://methylbro.titaxium.org/post/2009/06/15/les-variables-de-configuration-avec-PHP#comment-form</wfw:comment>
      <wfw:commentRss>http://methylbro.titaxium.org/feed/atom/comments/290</wfw:commentRss>
      </item>
    
</channel>
</rss>