JeuWeb - Crée ton jeu par navigateur
[PHP] Remplacer une partie d'un fichier dynamiquement - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] Remplacer une partie d'un fichier dynamiquement (/showthread.php?tid=5665)



[PHP] Remplacer une partie d'un fichier dynamiquement - sharyma - 26-08-2011

Bonjour !

Je suis actuellement en train de créer un CMS pour m'entraîner et apprendre de nouvelles choses, et je me heurte à un petit soucis : le fichier principal de configuration.

En fait, dans un des fichiers de config, j'ai les accès à la bdd, sous la forme de constantes.
Exemple :
Code :
define("DB_USER","root");

Je voudrai qu'à partir d'un formulaire, l'utilisateur puisse changer la valeur de "DB_USER". Par exemple, qu'il remplace "root" par "toto".


Le truc qui m'embête, c'est qu'il faut que ça marche même s'il a déjà modifié le fichier avant. Donc il faut que je puisse remplacer la valeur associée à "DB_USER", quelle qu'elle soit.

J'ai essayé avec plein de trucs, notamment des preg_replace, mais ça ne marche pas comme je veux, ça m'écrase tout. Et à force de faire des modifs, mon fichier ne ressemble plus à rien xD

Quelqu'un aurait-il la solution pour pouvoir modifier dynamiquement ce genre de choses ?



A noter que j'aimerais procéder obtenir le même résultat avec autre chose que des constantes, par exemple des variables.
Exemple :
Code :
$nb_msg = 10;
Et le joueur doit pouvoir remplacer "10" par le nombre de son choix.


RE: remplacer une partie d'un fichier dynamiquement - djidi - 26-08-2011

C'est toujours des variables de configuration ?

Perso j'utilise un fichier en JSON. Un fichier global CMS et un fichier pour chaque site, le second overridant le premier pour les clés correspondantes.
L'avantage c'est qu'en php tu peux faire un json_decode() pour avoir un tableau PHP et json_encode() pour avoir de nouveau du json.

Tu aurais donc juste à récupérer la configuration actuelle et récupérer le formulaire, remplacer les valeurs, reconvertir en JSON et écrire dans le fichier.


RE: remplacer une partie d'un fichier dynamiquement - sharyma - 26-08-2011

Mais c'est plus lourd, non ?
J'avoue ne pas encore m'être mise au json, malgré qu'on ne m'en ai dit que du bien.

J'ai continué de chercher, en combinant "file_put_contents" et "str_replace", je commence à me rapprocher de ce que je veux. En fait la valeur est bien ajoutée en bas du fichier, mais elle ne remplace pas celle que je veux.

Je continue de chercher !


RE: remplacer une partie d'un fichier dynamiquement - djidi - 26-08-2011

Je ne pense pas que ce soit très lourd.


{
"var1": "value1",
"var2": "value2",
"var3": "value3",
"var4": "value4"
}


<?php

/* Récupération du contenu du fichier et conversion en tableau PHP
* le paramètre TRUE permet de convertir en tableau PHP au lieu d'une classe. */
$config = json_decode(file_get_contents('config.json'), true);

// Les nouvelles valeurs récupérées depuis le formulaire.
$newConfig = array_merge($config, $_GET);

// Reconversion en JSON et ajout du tableau dans le fichier.
file_put_contents('config.json', json_encode($newConfig));

?>

Dans le cas présent j'ai ajouté directement le contenu de $_GET mais ca peut-être un tableau que tu génères toi même.


RE: remplacer une partie d'un fichier dynamiquement - sharyma - 26-08-2011

D'accord, merci pour l'éclaircissement !
Cependant, ne connaissant pas trop json, j'ai quelques questions ^^

- l'avantage de mon fichier de config actuel c'est que j'ai des constantes, c'est plus pratique pour s'y retrouver. Or là je ne vois pas trop comment faire de constantes sans passer par un traitement en php

- l'autre avantage de mon fichier, c'est que vu que je n'ai que des constantes et des variables, je peux les utiliser n'importe où dans mon site (à condition que le fichier de config soit appelé bien sûr), sans avoir à faire aucun traitement php. Du coup c'est forcément plus léger que de générer un array php à partir du json à chaque rechargement de page, non ?


Désolée si je me trompe Smile


RE: remplacer une partie d'un fichier dynamiquement - djidi - 26-08-2011

Mon tableau de configuration est une variable globale ce qui me permet de l'utiliser dans toutes les fonctions.
Quand au temps de traitement, désolé, je ne sais pas quel quel est le coût de la récupération du fichier et de sa conversion en array PHP, mais je ne pense pas que ca soit très important.

Le JSON a aussi d'autres avantages :
- C'est un format qui est lisible dans d'autres langages, ex: JS.
- Tu peux faire des tableaux multi-dimmensionnels. Je trouve ca beaucoup plus clair que faire des constantes.

Exemple :

{
"hotel": {
"baseMoney": 10000,
"roomSizeX": 100,
"roomSizeY": 100,
"maxLevels": 5,
"levels": {
"1": {
"customersPut": 10,
"bedroomsMin": 5,
"money": 500,
"prestige": 0,
"gains": {
"prestige": 10
}
},
"2: {
"customersPut": 20,
"bedroomsMin": 10,
"money": 1000,
"prestige": 50,
"gains": {
"prestige": 20
}
}
}
}
}


Après, il y a sans doute d'autres méthodes pour faire le traitement que tu as besoin, mais je trouve cette solution pratique Smile