Retourner aux forums || Retourner au forum Programmation.shell

Programmation.shell : substitution dans un fichier

Posté par fabien () le 14 novembre 2004
0
Bonjour, je cherche une commande pour faire une substitution de chaîne dans un fichier.

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.

> Lire le message (5 commentaires, moyenne: 2,2).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

And the winner is ... perl

Posté par Swirly () le 14/11/2004 à 18:12. (lien). Évalué à 2.

Perl est ton ami
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 () le 14/11/2004 à 18:25. (lien). Évalué à 4.

    PS : jsuis sur que ça peut se faire en deux fois moins de lignes en obfuscated perl :)

    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).

    --
    #define MAGIC 0xdefaced /* I should've patented this number -cliph */
    • [^]Re: And the winner is ... perl

      Posté par fabien () le 14/11/2004 à 20:43. (lien). Évalué à 1.

      merci a vous deux pour vos deux reponses,

      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 (Jabber id, page perso, ) le 14/11/2004 à 18:28. (lien). Évalué à 3.

a la place de #SERVER#=abcd met #define SERVER abcd et utilise l'option -E de gcc ou carement cpp pour le faire.
tu fait un :
$> cpp mesdefs.inc.php monfich.php.modèle > res.php

--
Ma signature ici
  • [^]Re: le préprocesseur de gcc

    Posté par fabien () le 14/11/2004 à 20:48. (lien). Évalué à 1.

    C'est vachement original !
    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é.

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell