Le mois de la fonction PHP : fichiers de configuration

Transcription

Le mois de la fonction PHP : fichiers de configuration
Le mois de la fonction PHP : fichiers de configuration
(vendredi 20 avril 2007) - Soumis par admin - Dernière mise à jour : (jeudi 19 avril 2007)
<a href=""></a>Un fichier INI est un fichier de configuration en mode texte qui contient des paramètres déstinés aux
applications.
Pour lire ce format de fichier PHP met à disposition une fonction : parse_ini_file().
Elle permet de récupérer le contenu d'un fichier INI sous forme de tableau associatif.
Fichier INI : config.ini
[db]
host = "localhost"
username = "foo"
password = "bar"
[session]
save_path = "temp/sessions"
Je vous conseil d'entourer chaque valeur par des guillemets doubles. Un fichier INI peut être divisé en sections
(entourées ici par des crochets). En passant true en deuxième paramètre de la fonction parse_ini_file() on peut
récupérer ces sections.
Lire un fichier de configuration
Exemple n°1 : Récupérer le contenu sous forme de tableau associatif
<?php
$config = parse_ini_file('config.ini', true);
print_r($config);
/**
* Résultat :
*
* array(2) {
* ["db"]=>
* array(3) {
* ["host"]=>
* string(7) "serveur"
* ["username"]=>
* string(3) "foo"
* ["password"]=>
* string(3) "bar"
* }
* ["session"]=>
* array(1) {
* ["save_path"]=>
* string(13) "temp/sessions"
* }
*}
*
*/
http://www.nexen.net - Nexen.net : portail PHP et MySQL
Generated: 25 April, 2007, 14:25
?>
Si le fichier n'est pas trouvé la fonction générera un message d'alerte (Warning) et retournera un tableau vide. Veillez
donc à vérifier le retour avant de continuer l'execution de votre application.
Exemple n°2 : Contrôlez le retour
<?php
ini_set('display_errors', 0);
if (!$config = parse_ini_file('config.ini', true)) {
/**
* Impossible de lire le fichier de configuration.
*/
}
?>
Gestion du message d'erreur
Pour faire disparaître le message d'alerte, on peut désactiver l'affichage des erreurs via la directive display_errors.
L'utilisation du signe @ devant la fonction est déconseillée. La modification de la directive permet de permuter
l'affichage des erreurs en modifiant une seule valeur. Je ne met pas error_reporting(0) car je tiens à ce que mon erreur
soit enregistrée dans le fichier de log.
Sécurité
Il est fortement conseillé de placer les fichiers de configurations en dehors d'un répertoire accessible par Internet.
Parfois il n'y a pas le choix, alors utilisez un fichier .htaccess et mettez-y :
<files *.ini>
order deny,allow
deny from all
</files>
Ecrire dans un fichier de configuration
Dans certains cas il peut arriver que la configuration change au cours de l'application et que l'on souhaite enregistrer les
changements de configuration dans le fichier INI. Pour cela la fonction ci-dessous pourra vous être utile.
<?php
function write_ini_file($path, $assoc_array) {
http://www.nexen.net - Nexen.net : portail PHP et MySQL
Generated: 25 April, 2007, 14:25
foreach ($assoc_array as $key => $item) {
if (is_array($item)) {
$content .= "\n[$key]\n";
foreach ($item as $key2 => $item2) {
$content .= "$key2 = \"$item2\"\n";
}
} else {
$content .= "$key = \"$item\"\n";
}
}
if (!$handle = fopen($path, 'w')) {
return false;
}
if (!fwrite($handle, $content)) {
return false;
}
fclose($handle);
return true;
}
?>
Attention cette fonction retourne true ou false.
Exemple n°3 : Enregistrer la nouvelle configuration
<?php
/**
* Configuration de départ
*/
$config = parse_ini_file('config.ini', true);
if (!empty($_POST['enregistrer_configuration'])) {
$_CLEAN['save_path'] = filter_save_path($_POST['save_path']);
/**
* Nouvelle configuration
*/
$config['session']['save_path'] = $_CLEAN['save_path'];
/**
* Enregistrement de la configuration
*/
write_ini_file('config.ini', $config);
}
?>
N'oubliez pas de vérifier toutes les variables provenant de sources extérieurs ($_POST['save_path']) et de vérifier que
la fonction retourne bien true.
http://www.nexen.net - Nexen.net : portail PHP et MySQL
Generated: 25 April, 2007, 14:25
A mémoriser :
- parse_ini_file() : Disponible depuis PHP 4.
- INI sur Wikipedia : http://fr.wikipedia.org/wiki/INI.
- Depuis PHP 4.2.1, cette fonction est aussi affectée par le safe mode et open_basedir.
- Depuis PHP 5.0, cette fonction gère aussi les nouvelles lignes dans les valeurs.
- Si une valeur du fichier .ini contient des données non-alphanumériques, il faut la protéger en la plaçant entre
guillemets doubles (").
http://www.nexen.net - Nexen.net : portail PHP et MySQL
Generated: 25 April, 2007, 14:25

Documents pareils