en fait je cherche à substituer plusieurs chaines d'un même coups , voici un exemple...
imaginons un fichier :
fichier : connexion.inc.php.modele
<?php
$cnx=mysql_pconnect("#SERVER#","#USER#","#PASS#")or die("prout!");
>
et maintenant un autre fichier dans le quel serait specifié mes valeurs, par exemple :
fichier : vars
#SERVER#=abcd
#USER#=bob
#PASS#=xyz
J'aimerais bien trouver une commande qui prenne mon fichier d'entrée connexion.inc.php.modele me substitue les chaines du fichier vars et me donne un autre fichier connexion.inc.php par exemple.
quelqu'un peut'il m'aider a trouver cette commande magique ?
merci.
# And the winner is ... perl
Posté par Swirly . Évalué à 2.
Tu peux construire le script assez facilement.
Le module Config::General te permet de parser ton fichier var pour en sortir un hachage qui contient tes valeurs.
Tu n'a plus qu'a faire les substitutions dans le second fichier :
exemple de fichier de substitution
-------------------------------------------
#!/usr/bin/perl
use Config::General;
my $input_filename = "connexion.inc.php.modele";
my $output_filename = "connexion.inc.php";
my %config=ParseConfig(vars);
## Lecture de l'entree
open(INPUT,$input_filename);
my @TABLEAU = ;
close (INPUT);
## Ecriture de la sortie
open (OUTPUT,"> $output_filename");
foreach $ligne (@TABLEAU) { # Pour chaque ligne
foreach $variable (keys %config) { # pour chaque variable
s/$variable/$config{$variable}/g; # on substitue
}
print (OUTPUT,$ligne);
}
close (OUTPUT); # fini :)
-----------------------------------------------------
Hope it helps :)
PS : jsuis sur que ça peut se faire en deux fois moins de lignes en obfuscated perl :)
[^] # Re: And the winner is ... perl
Posté par Cali_Mero . Évalué à 4.
Euh, pareil en php hein... Le monsieur n'a pas besoin de changer de langage pour faire ce que tu dis.
Si tu désires réellement avoir des variables de conf dans tes scripts php, tu peux au choix :
1/ faire en php ce que Swirly te propose en perl (les fonctions strtr() et eval() peuvent t'y aider), mais c'est pas très propre, vraiment...
2/ Faire un fichier php avec des variables de configuration, et un simple include() pour les appliquer (c'est la méthode la plus couramment employée):
<?php
//--------------------------
// config.php
//--------------------------
$config=array();
$config['mysql_server']="localhost";
$config['mysql_user']="root";
$config['mysql_password']="ChangeMe";
// etc....
?>
<?php
//--------------------------
// index.php
//--------------------------
require_once('config.php'); // c'est comme include()
$cnx=mysql_pconnect( $config['mysql_server'] ,$config['mysql_user'] , $config['mysql_password'] ) or die ("prout!");
// etc....
?>
3/ Tu peux aussi faire une variante de ce que tu dis, en stockant tes variables dans un fichier INI. la fonction parse_ini_file() de php te mâche le boulot ... Mais si tu choisis cette voie, attention à la sécurité ! (le fichier ini ne doit pas pouvoir être ouvert via le web, donc il faut le placer dans un répertoire à part avec le .htaccess qui va bien).
[^] # Re: And the winner is ... perl
Posté par fabien . Évalué à 1.
Swirly, je ne connais pas le perl, mais bon je vais faire un copié collé pour voir :).. mais j'aurais bien aimé que les fichiers soient pris sur la ligne de commande et non en dur dans le script. comme ca :
$commandemagique -in connexion.inc.php.model -param var -out connexion.inc.php
Tipiak, c'est tout a fait juste, je peux tres bien le faire en php, j'y avais d'ailleur pensé (un petit split sur le contenu de 'vars' pour chopper les parern, un bête file pour 'lire' le fichier modele, et un substr_replace (ou un ereg_replace)... bon, bref ouais ca doit se faire, mais je pensais qu'on pouvais trouver une comande unix/linux qui faisait dejà celà... (ou même que j'allais enfin a masteriser sed/awk :) )
Une remarque, a propos de $config['mysql_server']="localhost";.... (ou même avec un define ou peu importe).. je suis contre...
en fait, mon fichier connexion.inc.php est déjà un fichier à inclure (oui j'utilise @require_once qui est bien mieux) comme son nom l'indique (le .inc.php).. donc je ne vois pas l'interret d'inclure un fichier qui contiendrait les identifiant... (un etage de plus, autant les mettre directement dasn mon fichier :) )
La raison de tout ca ?
je veux pouvoir deployer un projet sur des machines, en lancant un script (comme un make .. d'ailleur ca sera sans doute un make...) il est hors de question d'editer un fichier php du projet pour y mettre la base de donée/username/password...
el but est donc de finir de construire des fichier php automatiquement.
bon, ben... sauf si qqun connais une commande directe, ou avec du sed... he ben je vais la faire en php...
merci.
# le préprocesseur de gcc
Posté par vincent LECOQ (site web personnel) . Évalué à 3.
tu fait un :
$> cpp mesdefs.inc.php monfich.php.modèle > res.php
[^] # Re: le préprocesseur de gcc
Posté par fabien . Évalué à 1.
en changeant la syntaxe de mon fichier de paramettre ... (oui la syntaxe j'y suis pas particulierement attaché)
Bravo pour l'originalité, j'y avais pas pensé.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.