Manipulating INI file

Mon 05 June 2006, ,

When you build a (web) application, you sometimes want to store user configuration (like password (sha1’d of course) or what else). What’s the nicest solution ?

Database ?
f**king hell, seriously ? Forget that.
XML file ?
100% geek but pain-in-the-arse to parse and maintain.
INI
So easy to understand, comment, diff.

I’m not very umpartial because I dislike database-usage-for-everything and because I’ve spent lot of time to build the following PHP class that parse and write ini file. Ini files are used in doContent for every things that are configurable (but there’s some XML too, because it rocks).

INI file

; A comment
[section1]

; variable A
var_a = toto

var_b = tata

Manipulating with PHP

<?php
include_once("ini.class.php");
$filename = "test.ini";

//--
header('Content-type:text/plain');

// =& for PHP 4 (avoid the object copy)
// true for processing section (default is false like parse_ini_file)
$data =& new ini($ini, true);

$data->setValue(pi(), 'var_a', 'section1');
$data->setValue('hello world!', 'var_b', 'section1');
$data->setValue('Lorem lipsum', 'var_c', 'section2');

// display the file (-->__toString() not necessary for PHP5)
echo $data->__toString();
?>

The result

; A comment
[section1]

; variable A
var_a = 3.14159265359

var_b = hello world

[section2]
var_c = Lorem lipsum

As you can see, all the comments are preserved, the values are modified and the new section section2 and its value var_c are correctly added.

Don’t forget to protect yourself

Don't autorize the direct access to these files. For example, you can do it with a traditionnal Apache .htaccess that contains :

<Files *.ini>
    Order deny,allow
    Deny from all
</Files>

Something that like this at the first line of your ini can avoid the php inclusion :

; <?php exit();?>

And a big hurray for Batiste, he’ll start his new job tommorrow.

Lors de la création d’application internet, il est souvent intéressant de pouvoir enregistrer des éléments de configuration, le bon vieux fichier ini. Ce que nous avons fait pour doContent, mais si ce sont des fichiers simples à lire avec PHP, il est plus difficile de les modifier. Voici une petite classe en PHP (4 ou 5) permettant de les manipuler avec aisance.

Lire l’exemple ci-dessus.

Le résultat final est un fichier ini dans lequel les commentaires existant ont été conservé, les modification répercutées et les ajouts de nouvelles valeurs appliqués. Et n’oubliez pas de protéger vos fichiers .ini, par exemple via un .htaccess pour Apache (voir ci-dessus).

Complétement hors sujet : Batiste s’est trouvé un job dans le petit milieu du développement web (avec des technos proprios, mais qui ne demandent qu’à être remplacées, non ? forcément !)