ZCONF
ZCONF читает текстовые конфигурации в PHP-массивы и собирает их обратно из значений и таблиц. Формат использует присваивания, секции [table], массивы и комментарии #. Это отдельный парсер: похожий синтаксис не означает полной совместимости с TOML.
Установка
Заголовок раздела «Установка»composer require localzet/zconfПакету нужны PHP 7.1 или новее и расширение JSON. Классы находятся в пространстве имён ZCONF.
Чтение конфигурации
Заголовок раздела «Чтение конфигурации»use ZCONF\Parser;
$config = Parser::parseString(<<<'CONF'[server]name = "Example"port = 8080enabled = trueCONF);
$port = $config['server']['port'];Для файла используйте Parser::parseFile('/etc/example/service.zconf'). Метод проверяет существование и доступность файла, читает его целиком и добавляет сведения о файле к ошибке разбора. Веб-приложение должно выбирать путь само, а не принимать произвольный путь из запроса пользователя.
Пустой документ возвращает null. Второй аргумент true превращает верхний уровень в stdClass; вложенные таблицы остаются массивами. Для единообразного доступа обычно удобнее оставить стандартный результат-массив.
Парсер нормализует переводы строк и проверяет UTF-8. Значения после разбора всё равно нуждаются в прикладной валидации: наличие server.port ещё не означает, что значение допустимо для сетевого порта.
Структура документа
Заголовок раздела «Структура документа»name = "Example"enabled = trueports = [8080, 8081]
[database]host = "127.0.0.1"
[[workers]]name = "jobs"
[[workers]]name = "mail"Обычная таблица группирует именованные значения. Повторяемая секция [[workers]] добавляет элементы массива таблиц. Парсер также распознаёт вложенные пути таблиц, inline-таблицы, null, числовые значения, даты и несколько форм строк. При переносе конфигурации из другого формата сначала проверьте требуемые конструкции на ZCONF; расширение файла само по себе не определяет совместимость.
Создание документа
Заголовок раздела «Создание документа»use ZCONF\Builder;
$text = (new Builder()) ->addComment('Service configuration') ->addTable('server') ->addValue('port', 8080) ->addValue('enabled', true) ->getString();Builder возвращает строку и не записывает файл. Запись, права доступа, резервная копия и атомарная замена файла остаются задачей приложения.
addTable('database.pool') выбирает вложенную таблицу; addArrayOfTable('workers') создаёт следующий элемент массива таблиц. Конфликтующие определения и повторные ключи отклоняются.
Массивы значений должны быть однородными по PHP-типу. Builder выводит значения массива последовательно; его ассоциативные ключи не сохраняются. Для именованных полей используйте таблицы.
Ошибки и проверка настроек
Заголовок раздела «Ошибки и проверка настроек»Ошибки чтения и синтаксиса передаются через исключения ParseException/SyntaxException; невозможность представить значение — через DumpException. Не подменяйте ошибочный конфигурационный файл пустыми настройками: это скрывает проблему и может включить нежелательные значения по умолчанию.
После разбора проверьте обязательные секции, типы, диапазоны, допустимые адреса и комбинации параметров. ZCONF отвечает за формат документа, а не за контракт конкретного сервиса.
Исходный код · MIT