— Задний план —
Поэтому я работаю над сценарием установщика для локальных машин-разработчиков и его для установки текстового пресса. Я пытаюсь сделать так, чтобы пользователь выбирал конкретный подключаемый модуль из раскрывающегося списка, а затем выбирал какую версию они хотят установить.
– Проблема –
Поэтому мне нужно иметь возможность анализировать файл .cfg и хранить все значения в переменных динамически, поэтому, если мы добавим больше плагинов, он не сломается. Как мне это сделать?
Пара способов, в зависимости от того, как вы хотите сохранить данные конфигурации. Самый быстрый способ – хранить данные как .ini-файл и анализировать его с помощью встроенного в parse_ini_file PHP. Вы также можете хранить данные в других форматах, таких как XML и YAML, но я бы не рекомендовал XML, поскольку вы, вероятно, не будете переносить данные между разрозненными системами, также XML, как правило, сложнее читать со всеми посторонними тегами ( vs yaml или ini).
Я лично предпочитаю yaml и использую синтаксический анализатор Yaml Component для Symfony, который будет анализировать файл yaml в массиве. Компонент Yaml от Symfony можно использовать вне рамок Symfony. Вы могли бы также взглянуть на парсер Zend's Yaml .
После того, как вы выберете формат и парсер, которые хотите использовать, это так же просто, как хранить файл конфигурации где-нибудь, доступный вашему веб-серверу, требующий его, и передачу его через API-парсер. После его анализа вы должны иметь доступ к значениям через массив.
— Обновить —
<?php $settings = parse_ini_file('test.ini'); var_dump($settings);
Результаты:
array(41) { ["plugins"]=> string(0) "" ["breadcrumb-navxt"]=> string(5) "4.0.1" ["bp-moderation"]=> string(5) "0.1.4" ["buddypress-activity-stream-hashtags"]=> string(5) "0.4.0" ["buddypress-group-documents"]=> string(5) "0.3.5" ["buddypress-group-email-subscription"]=> string(5) "2.9.1" ["buddypress-links"]=> string(3) "0.5" ["buddypress"]=> string(6) "1.2.10" ["calendar"]=> string(5) "1.3.1" ["collapsing-pages"]=> string(5) "0.6.1"
Кажется, это работает так, как ожидалось, поэтому, если я хочу, чтобы номер версии плагина calendar
я просто сделал:
var_dump($settings['calendar']);
Сохранение в динамических переменных:
$settings = parse_ini_file('test.ini'); foreach ($settings as $key => $setting) { // Notice the double $$, this tells php to create a variable with the same name as key $$key = $setting; } var_dump($calendar);
Не могли бы вы сохранить файл в формате json или php serialized?