Bonjour
Est il possible de lire dans une boucle les valeurs d'un fichier contenant que des define pour faire un traitement dessus?
Je souhaite récupérer le nom de la constante et la valeur.
Merci
Cordialement
Bonjour
Est il possible de lire dans une boucle les valeurs d'un fichier contenant que des define pour faire un traitement dessus?
Je souhaite récupérer le nom de la constante et la valeur.
Merci
Cordialement
Salut
C'est bizarre un peu comme question, car si juste au dessus on a créer des constantes avec des define(), c'est que leurs noms et valeurs sont connues, non ?
Pourquoi vouloir boucler ?
Ceci dit, tu peux utiliser une lecture du fichier (fopen, fgets), ligne par ligne et récupérer/extraire tour à tour leur nom/valeur, voir modifier les contenu du fichier.
Il y a get_defined_constants(), mais ça retourne toutes les constantes dans un tableau, mais alors toutes.
Il y tout de même la fonction constant('NOM_DE_LA_CONSTANTE') qui retourne sa valeur, mais faut connaitre son nom.
Bonjour
Oui je sais la demande est un peu particulière.
Par contre, vous avez devancer ma question d'après, a savoir, peut ont les modifier après.
Sauf erreur de ma part la fonction get_defined_constants ne permet pas de modifier la valeur, la constante je la garde tel qu'elle est.
Comment modifier la valeur de la constante, avons nous une commande pour le faire?
Cordialement
Oui, le get_defined_constants() ne fait que retourner les couples nom/valeurs, impossible de les modifier ainsi.Envoyé par William210
Ensuite, à partir du moment où le fichier des constantes (des define()) sera interprété par Php, il ne sera plus possible de modifier les constantes, car par définition une constante ne peut varier.
Le seul moyen, c'est de traiter/modifier le fichier contenant ces define() comme tout autre fichier, de modifier dynamiquement le code php, ceci avant qu'il soit interprété.
En gros, on récupère le contenu, on y modifie ce qui doit l'être, on re-génère le code php, les define(), on écrase le fichier au final par le nouveau contenu.
Enfin, si j'ai bien compris le but.
Bonjour,
J'utilise ce code pour charger dynamiquement un ensemble de paramètre sous forme de constantes. Je lis d'abord un fichier et ensuite dans une table de base de données. Si un paramètre est défini dans les 2, c'est la valeur lue dans le fichier qui fait foi car elle est définie en premier lieu à partir du fichier.
Ce système permet d'avoir des valeurs par défaut définies en base et et des valeurs spécialisables dans un fichier de conf propre à chaque serveur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 $path = pathinfo(__FILE__); $filename = $path['dirname'] . DIRECTORY_SEPARATOR . 'params.csv'; /***********************************************/ /* Récupération des valeurs depuis fichier */ /***********************************************/ if (is_file($filename)) { $fp = fopen($filename,'r', true); if ($fp) { while($data = fgetcsv($fp,0,';')) { define($data[0], $data[1]); } fclose($fp); } } require_once('config/si_database.php'); /***********************************************/ /* Récupération des valeurs depuis BDD */ /***********************************************/ $dbConfig = new SI_DB_CONFIG(); $db = $dbConfig->paramConn(); $query = 'SELECT NOM_PARAMETRE, VALEUR FROM params'; $stmt = $db->query($query); while($param = $stmt->fetch(PDO::FETCH_ASSOC)) { //Si le paramètre n'est pas déjà défini en fichier... if (!defined($param['NOM_PARAMETRE'])) define($param['NOM_PARAMETRE'], $param['VALEUR']); } $stmt->closeCursor();
Oui, et je n'est vraiment pas vu de quoi le faire par MP, rien vu de si confidentiel que ça, t'aurais très bien pu te contenter d'ajouter cet info dans ton 1er post.Avez vous reçu mon mp qui vous donne la raison de cette recherche?
Bonsoir
Merci pour le bout de code.
Avec la fonction get_defined_constants je peux récupérer le couple constante/valeur mais pour aller au bout de mon traitement il faudrait pouvoir modifier la valeur?
Vous ne connaissez pas une commande pour le faire?
Sinon je vais être obligé de recrer complètement le fichier et alors je vais perdre les commentaires et autres annotations du fichier et cela me gène.
Cordialement
Une fois définie, il n'est pas possible de modifier la valeur d'une constante. Pas la peine de chercher plus loin.
A moins d'avoir l'extension runkit à disposition ?
ahh! on en apprend tous les jours !
En plus ça n'a pas l'air si exotique puisque Wamp 2.0 l'embarque pour Windows !
Après en prod sous Linux il faut voir...
+1
Je ne connaissais pas du tout non plus, jamais entendu parlé.
Sur Wamp2.0, j'ai essayé ... ça marche pô
J'ai fouillé un peu (vite fait, faut dire), j'ai rien de PECL dans les parage.
Elle serait installée où cette bibliothèque ?
Idem sur un Xubuntu + Xampp.
Impossible de lancer un runkit_constant_redefine().
A voir les fonctions, bluffant ce runkit tout de même.
Pas forcement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Sinon je vais être obligé de recrer complètement le fichier et alors je vais perdre les commentaires et autres annotations du fichier et cela me gène.
Faudrait ouvrir le fichier, le parser ligne par ligne, stocker les lignes (le contenu) dans une variable.
Lorsqu'on rencontre une ligne ou il y un code contenant la chaine -> define, et bien faut extraire son nom pour savoir s'il faut ou non le modifier.
Si c'est le cas, alors faut supprimer sa valeur et la remplacer par la nouvelle.
Il n'y a pas à toucher aux commentaires, faut les conserver.
Au bout, la variable contiendra l'intégralité du fichier, et des nouvelles valeurs des constantes, et on "écrase" le fichier avec les données de cette variable.
Bon, faut espérer que le fichier soit un minimum structuré pour faciliter la recherche des define().
Puis il faut aussi que cette routine (une réécriture en somme) soit faite avant d'inclure le fichier, sinon c'est le serpent qui se mord la queue.
A coté de ça, si cette bibliothèque PECL runkit est installée, alors là faut pas chercher plus loin. This is THE solution à mon avis.
Erf, avec PHP 5.3.1 et en compilant la version svn de runkit en dynamique ça crashe sur une constante - mais pas sur une redéfinition de fonction.
Mais il faut l'installer (ou plutôt la compiler) pour jouer avec Donc, en "mutualisé", peu de chance qu'elle soit disponible.
Bonsoir
Oui oui cela devrait marcher
Maintenant faut que j'aille le coder
Bonne soirée à tous
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager