Fichiers de configuration
Par J.Ducastel le vendredi 7 décembre 2007, 16:27 - Formules - Lien permanent
Lorsqu'on développe une application
ou un composant de manière à pouvoir le réutiliser, il est nécessaire de
pouvoir définir une configuration d'environnement de manière séparée du code.
Cela peut être fait par inclusion d'un fichier se contentant de déclarer un
suite de variables ou de constantes dans le language de l'application (c'est le
cas des fichiers urls.py et settings.py de Django). Mais il est généralement
préférable d'utiliser un format qui puisse être lu et modifié par un
non-programmeur.
Le format INI
A la fois très simple et très largement utilisé, le format INI permet de définir des paires clefs/valeur, éventuellement organisées par sections. Il est suffisamment intuitif pour être modifié par quelqu'un qui n'en connait pas la syntaxe.
C'est le format de configuration de PHP, et une fonction native permet de lire un tel fichier et de récupérer directement les données stockées dans un tableau associatif, à deux dimensions en activant le support des sections.
Python dispose du module ConfigParser, qui supporte une syntaxe un peu plus évoluée.
Le format XML
Le patriarche des formats de structuration et d'échange de données. Plus qu'un format de fichier, XML est une grammaire dont dérivent des zillions de syntaxes, qu'elles soient standardisées ou propriétaires. Très largement utilisé pour la configuration d'application, ce n'est pourtant pas forcément des plus simples à éditer. De plus, il est généralement assez lourd à manipuler en programmation, ce qui n'est pas terrible en termes de performance. Surtout dans le cadre d'une application web, si celle-ci doit lire le fichier à chaque requete...
Le format YAML
Si vous avez besoin de données de configuration plus élaborées, notamment s'il vous faut plus de deux niveaux de données ou des textes sur plusieurs lignes, il y a le format YAML. Celui-ci se veut une alternative à XML, qui soit à la fois plus concise (donc plus légère à stocker) et plus lisible pour un être humain. Ce qui en fait un candidat idéal pour des fichiers de configuration. Comme en Python, l'indentation y joue un rôle clef.
Contrairement à INI, il n'est pas supporté nativement par PHP, mais la librairie Spyc permet de convertir ces fichiers en tableaux de données et inversement.
Python dispose de la librairie PyYaml.

Commentaires
Ce qui est pas mal aussi c'est de stocker les données sensibles dans le fichier .htaccess. Par exemple :
SetEnv MySQL_Serveur "localhost"
SetEnv MySQL_Login "user"
SetEnv MySQL_Pwd "password"
SetEnv MySQL_Base "production"
Ainsi, on peut les retrouver dans les variables du tableau $_SERVER :
echo $_SERVER['MySQL_Serveur'];
echo $_SERVER['MySQL_Login'];
echo $_SERVER['MySQL_Pwd'];
echo $_SERVER['MySQL_Base'];
L'intérêt de ça, c'est que l'accès au fichier .htaccess est très difficile mis à part si un pirate arrive à uploader un script php sur le serveur web.
++