Page 1 sur 1

écrire dans un fichier de config avec php

Posté : 11 août 2011, 14:22
par tykayn
Bonjour à tous, j'ai commencé à apprendre le php il y a maintenant 3 ans.
Afin de faire des sites avancés sans me servir de CMS j'essaie d'apprendre quelques trucs.

Donc voici mon souci,je voudrais savoir s'il existe un moyen facile de:
ne changer qu'une partie d'un fichier où je mettrais mes variables de configuration
+ sans aller jusqu'à gérer une base de donnée.
Bien que je sache gérer des BDD je m'intéresse à d'autres possibilités.

Par exemple
***config.php***

Code : Tout sélectionner

<?php $tabmenu = array("a","b","c"); //tableau précisant les pages que je souhaite faire apparaître dans mon menu $mode_debug = 1; //faire apparaître les infos de débug ou non. ?>
je pourrais réécrire entièrement le fichier avec fread() et fwrite() mais il y a sans doute un moyen plus facile de dire à php "changer la valeur de la variable qui s'appelle comme ceci" ou encore, "modifier l'array de $tabmenu".

Merci de votre aide :)

Re: écrire dans un fichier de config avec php

Posté : 11 août 2011, 15:13
par Mazarini
Bonjour,

Tu peux regarder du coté de la fonction fseek (http://www.php.net/manual/fr/function.fseek.php).

J'ai peur que ce soit assez compliquer à gérer. Lire et écrire le fichier en totalité me semble suffisant.

Pour info, il doit être possible de faire un include de ce fichier dans une fonction et de récupérer les variables (récupération très facile des infos)

Edit : Voir fonction get_defined_vars pour récupérer les variables (nom et valeur) après l'include. A faire dans une fonction pour jouer sur la portée des variables

Re: écrire dans un fichier de config avec php

Posté : 11 août 2011, 18:01
par AB
Modifier une partie de fichier de la sorte est possible mais assez laborieux et moyennement fiable. Tu risque un jour ou l'autre d'avoir un fichier destroyé.

Le plus simple et le plus fiable selon moi est de mettre les infos dans un tableau sérialisé puis d'utiliser simplement file_get_contents/file_put_contents.

Tu pourrais faire par exemple
//definition du fichier
$tabconfig = array();
$tabconfig['menu'] = array("a","b","c"); //tableau précisant les pages que je souhaite faire apparaître dans mon menu
$tabconfig['mode_debug'] = 1;

// enregistrement
file_put_contents('config.txt', serialize($tabconfig));

//récupération des données du fichier
$tab_config = unserialize(file_get_contents('config.txt'));
$tab_menu = $tab_config['menu'];
$mode_debug = $tab_config['mode_debug'];
Très simple à manipuler et très fiable :wink:

EDIT :
Il existe cependant un cas rarissime où le fichier pourra être corrompu : si le serveur ne trouve pas le fichier (alors qu'il existe) et qu'on le modifie, par exemple :
//récupération des données du fichier
$tab_config = unserialize(file_get_contents('config.txt'));
$tab_config['mode_debug'] = 2;
//Envoi du fichier modifié
file_put_contents('config.txt', serialize($tab_config));
Dans ce cas de figure si le serveur commet une erreur lors de la récupération du fichier, le tableau ne contiendra plus que l'index dernièrement défini :$tab_config['mode_debug'] = 2;

Après la création du fichier, il est donc plus prudent de vérifier sa validité avant de le modifier. Par exemple :
$tab_config = @unserialize(@file_get_contents('config.txt'));
if(is_array($tab_config))
{
$tab_config['mode_debug'] = 2;
file_put_contents('config.txt', serialize($tab_config));
}
else echo 'fichier non modifié car le fichier est introuvable ou n\'est pas au bon format';
}

Re: écrire dans un fichier de config avec php

Posté : 12 août 2011, 20:07
par devlop78
Et pourquoi pas un INI ?