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:
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