J’adore les fichiers INI et vous ? Ils sont simple à créer, comprendre, éditer, parser, que demander de plus ?

Quand vous avez des données de configuration simples à sauvegarder dans un fichier, il vous faut faire un choix :

  • utiliser un fichier XML : lourd, pas forcement user-friendly ;
  • utiliser un fichier serialisé : rapide, pas du tout user-friendly en édition direct ;
  • utiliser un fichier avec un format perso : souvent difficile à faire évoluer ;
  • utiliser un fichier PHP avec des variables : rapide, difficile à éditer via un script, peu sécurisé ;
  • utiliser un fichier INI : rapide, user-friendly, facile à éditer par un script;
  • autre à préciser en commentaire ;-)

INI est un format de fichier développé par Microsoft pour certains fichiers de configuration dans Windows, ils sont maintenant majoritairement remplacés par la base de registre (plus d’informations sur l’historique : wikipedia).

Késako ?!

Le format INI est vraiment trés simple à comprendre, un exemple suffit :

 ; ceci est un commentaire [section1] variable1 = foo variable2 = "bar" [sectionfoo] bar = "value" foo = 3 

On a donc :

  • [ et ] pour délimiter les sections
  • name = "value" pour définir une valeur (les ” (guillemets) ne sont pas obligatoires)
  • ; pour les commentaires

C’est tout :-)

Utilisation avec PHP

Grâce à parse_ini_file (en PHP 4 ou 5), vous pourrez décoder facilement vos fichiers :

 $mon_fichier_ini = parse_ini_file('monfichier.ini.php', true); 

ATTENTION : avec parse_ini_file n’utilisez pas de variables nommées :

  • null,
  • yes,
  • no,
  • true,
  • et false.

(Le gros piège c’est de mettre une liste de configuration pour des pays et d’utiliser le code ISO de la Norvège no = 5 par exemple)

Un conseil si vous êtes en PHP et que votre fichier INI est accessible via le Web : TOUJOURS mettre une ligne du style :

 ;  

en haut du fichier, ainsi si quelqu’un appelle le fichier via le Web, il ne pourra pas voir son contenu.

Maintenant pour l’écriture, il n’existe pas de fonction directement dans PHP, mais vous pouvez très facilement créer la votre ou… utiliser celle ci ;-) :

function make_ini_file($filename, $array)
{
	$out = "; \n”;

	if(is_array($array)) {
		foreach ($array as $section_name => $section_content) {
			$out .= “[$section_name]\n”;
			if(is_array($section_content)) {
				foreach ($section_content as $variable_name => $variable_value) {
					if (!is_bool($variable_value)) {
						$variable_value = ‘”‘.$variable_value.’”‘;
					}
					else {
						if($variable_value) {
							$variable_value = ‘TRUE’;
						}
						else {
							$variable_value = ‘FALSE’;
						}
					}
					$out .= “$variable_name = $variable_value\n”;
				}
				$out .= “\n”;
			}
		}
	}
	return file_put_contents($filename, $out);
}

Elle est écrite en PHP 5, si vous êtes en PHP 4, il vous suffit de changer la ligne return file_put_contents($filename, $out);.