Le meilleur moyen de parsingr les parameters de configuration dans Sh / Bash et php

J’ai eu dans chaque projet php (environ 25!), Des scripts qui m’aident dans des tâches de routine telles que le déploiement, la synchronisation de mise en pension, l’exportation / exportation de bases de données, etc.

Les scripts sh sont les mêmes pour tous les projets que je gère, il doit donc y avoir un fichier de configuration pour stocker les différents parameters qui dépendent du projet:

# example conf, the sintaxys only needs to be able to have comments and be easy to edit. host=www.host.com [email protected] password=xxx 

Je dois juste trouver un moyen propre de lire (parsingr) ce fichier de configuration à partir d’un script sh et, en même temps, pouvoir lire ces mêmes parameters à partir de mes scripts PHP. Sans avoir à utiliser XML.

Connaissez-vous une bonne solution pour cela?

Guillermo

Si vous ne souhaitez pas générer le fichier comme pavanlimo l’a montré, une autre option consiste à extraire les variables à l’aide d’une boucle:

 while read propline ; do # ignore comment lines echo "$propline" | grep "^#" >/dev/null 2>&1 && continue # if not empty, set the property using declare [ ! -z "$propline" ] && declare $propline done < /path/to/config/file 

En PHP, les mêmes concepts de base s'appliquent:

 // it's been a long time, but this is probably close to what you need function isDeclaration($line) { return $line[0] != '#' && strpos($line, "="); } $filename = "/path/to/config/file"; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); $lines = explode("\n", $contents); // assuming unix style // since we're only interestd in declarations, filter accordingly. $decls = array_filter($lines, "isDeclaration"); // Now you can iterator over $decls exploding on "=" to see param/value fclose($handle); 

Il suffit de source le fichier de script script comme un autre fichier sh !.

Exemple:

conf-file.sh:

 # A comment host=www.host.com [email protected] password=xxx 

Votre script actuel:

 #!/bin/sh . ./conf-file.sh echo $host $administrator_email $passwword 

Et le même fichier conf peut être analysé en PHP: http://php.net/manual/en/function.parse-ini-file.php

Pour un parsingur de fichiers Bash INI, voir également:

http://ajdiaz.wordpress.com/2008/02/09/bash-ini-parser/

parsingr le fichier ini à partir de sh / bash

 #!/bin/bash #bash 4 shopt -s extglob while IFS="=" read -r key value do case "$key" in !(#*) ) echo "key: $key, value: $value" array["$key"]="$value" ;; esac done <"file" echo php -r myscript.php ${array["host"]} 

alors de PHP, utilisez argv