2010-08-13 16 views
8

Tengo en cada proyecto php (¡alrededor de 25!), Algunos scripts que me ayudan con tareas rutinarias como implementación, sincronización de repositorio, exportación/exportación de bases de datos, etc.Mejor/más fácil manera de analizar los parámetros de configuración en Sh/Bash y php

los scripts sh son los mismos para todos los proyectos que administro, por lo que debe ser un archivo de configuración para almacenar diferentes parámetros que dependen del proyecto:

# 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 

sólo hay que encontrar una limpia forma en que este archivo de configuración puede leerse (analizarse) desde un script sh y, al mismo tiempo, ser capaz de leer esos mismos parámetros desde mis scripts PHP. Sin tener que usar XML.

¿Conoces una buena solución para esto?

Guillermo

Respuesta

6

Si no desea obtener el archivo como lo mostró pavanlimo, otra opción es las variables E utilizando un bucle:

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, se aplican los mismos conceptos básicos:

// 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 interested in declarations, filter accordingly. 
$decls = array_filter($lines, "isDeclaration"); 
// Now you can iterator over $decls exploding on "=" to see param/value 
fclose($handle); 
+0

Gracias! Suena bien. pero no resuelve la posibilidad de leer fácilmente desde PHP ... supongo ... – Guillermo

+0

Editado para incluir una posible solución de PHP. –

+0

Gracias por su respuesta ... Lo consideraré, pero considere la solución anterior más fácil :-) – Guillermo

17

¡Simplemente procese el archivo de configuración del script como otro archivo sh !.

Ejemplo:

conf-file.sh:

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

Su guión real:

#!/bin/sh 

. ./conf-file.sh 

echo $host $administrator_email $passwword 

Y lo mismo conf-archivo se puede analizar en PHP: http://php.net/manual/en/function.parse-ini-file.php

+0

¡Gracias amigo! Su solución parece fácil, pero comprendo que los comentarios del archivo INI comienzan por ";" y no por "#" como en SH. ¿Es eso correcto? – Guillermo

+0

No realmente, '#' todavía se puede usar; sin embargo, se lanza una advertencia si está usando> = v5.3. Cualquier versión inferior, no se lanzan advertencias. http://php.net/manual/en/function.parse-ini-file.php – pavanlimo

1

para analizar el archivo ini 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"]} 

continuación, a partir de PHP, el uso argv

Cuestiones relacionadas