Я получил в каждом проекте php (около 25!), Некоторые скрипты sh, которые помогают мне с обычными задачами, такими как развертывание, синхронизация репо, экспорт / экспорт баз данных и т. Д.
Шрифты sh одинаковы для всех проектов, которые я управляю, поэтому должен быть файл конфигурации для хранения различных параметров, которые зависят от проекта:
# example conf, the sintaxys only needs to be able to have comments and be easy to edit. host=www.host.com administrator_email=guill@company.com password=xxx
Мне просто нужно найти чистый способ, с помощью которого этот файл конфигурации может быть прочитан (проанализирован) из сценария sh и в то же время иметь возможность читать те же самые параметры из моих PHP-скриптов. Без использования XML.
Знаете ли вы хорошее решение для этого?
Гильермо
Если вы не хотите, чтобы исходный файл отображался как pavanlimo, другой вариант – это перетащить переменные с помощью цикла:
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
В PHP применяются те же основные понятия:
// 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);
Просто отправьте файл conf скрипта в другой файл sh !.
Пример:
conf-file.sh:
# A comment host=www.host.com administrator_email=guill@company.com password=xxx
Ваш реальный сценарий:
#!/bin/sh . ./conf-file.sh echo $host $administrator_email $passwword
И тот же conf-файл может быть проанализирован в PHP: http://php.net/manual/en/function.parse-ini-file.php
Для анализатора файлов Bash INI также смотрите:
для анализа файла ini из 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"]}
затем с PHP, используйте argv