Самый чистый способ читать настройки конфигурации из файла PHP и загружать весь код проекта с помощью сценария оболочки

Я новичок с оболочкой сценариев, поэтому нужно несколько идей по разбору PHP-файла с использованием сценария оболочки.

Наш проект PHP, и я улучшаю наш сценарий оболочки, который используется для загрузки кода на рабочий сервер.

Существует один файл конфигурации PHP production.settings.php который нужно читать во время загрузки, для нескольких констант –

BASE_PATH (путь к корню проекта на сервере prod)
db_host , db_name и т. д. (настройки базы данных базы данных prod – для использования для резервного копирования базы данных перед загрузкой)

Вопрос

  • Как читать значение констант?

    Они определяются следующим образом:

     define("BASE_PATH","/path/to/project/root"); 
  • Как прочитать первое недокументированное значение константы?
    Примечание . Константа может быть определена более одного раза в одном файле (предположим, что это возможно – это может произойти по ошибке или могут быть прокомментированы экземпляры строки)

Пока я могу получить только количество строк, содержащих определение строки define("BASE_PATH" используя grep в моем сценарии оболочки)

 cd .. PROJECT_ROOT=$PWD result= grep -ic 'define("BASE_PATH",' $PROJECT_ROOT'/config/main.settings.php' echo "see"$result 
  • Является ли этот метод синтаксического анализа достаточно хорошим, или файл yml будет лучше? Есть ли команда / snippet оболочки для этого, чтобы я мог получить результат, написав меньшее количество кода?

Обновления
Проверьте мои другие вопросы для получения дополнительной информации об этом: –
Манипулируя массивом (напечатанным php-cli) в сценарии оболочки ,
Присвоение значений, напечатанных PHP CLI, переменным оболочки ,
Инициирование динамических переменных (переменных переменных) в сценарии оболочки bash

просто сделайте это с помощью php, а затем вызовите сценарий оболочки для вызова скрипта php.

Предполагая, что у вас есть куча определений, определенных в defs.php :

 define('NAME', 'JOHN'); define('HOBBY', 'FISHING'); 

затем создайте php-скрипт get_defs.php :

 require_once 'defs.php'; $const = get_defined_constants(true); foreach($const['user'] as $k => $v) { echo "export $k=$v"; } 

то в своем сценарии оболочки запустите его так:

 `php get_defs.php` 

Что произойдет, get_defs.php выведет кучу export KEY=VALUE , тогда оболочка будет запускать те команды, которые php get_defs.php ваш php get_defs.php .

Почему бы вам просто не использовать PHP CLI ? Это то, что вы понимаете? Возможно, вы могли бы поместить константы в файл ini и прочитать их?

Если youre comforttable с PHP, то используйте PHP для написания сценария оболочки. ЕСЛИ вы идете по этому маршруту, я бы переместил все настройки конфигурации в файл конфигурации … INI, YAML, XML, whetever плавает на вашей лодке. Затем я бы изменил загрузку приложения, которое определяет ваши константы, чтобы также читать из этого конфигурационного файла. Таким образом, вы можете использовать его как в своем сценарии, так и в приложении, не меняя его.