Skip to content

Feature Parsing

github-actions[bot] edited this page Jul 16, 2026 · 1 revision

📄 Разбор .env

← Возможности · Главная · Сравнение

Полный разбор dotenv-диалекта одним проходом: кавычки, export, комментарии, многострочные значения и инлайн-комментарии — без внешних зависимостей.

Принцип работы

EnvParser::parse() построчно разбирает содержимое .env в упорядоченный массив «имя → значение», валидируя имена шаблоном [A-Za-z_][A-Za-z0-9_]* и поглощая многострочные значения в кавычках до закрывающей кавычки.

use CloudCastle\Env\EnvParser;

$vars = (new EnvParser())->parse(<<<'ENV'
    export APP_NAME="CloudCastle Env"
    APP_DEBUG=false
    NOTE='literal $VAR, без экранирования'
    MULTILINE="строка 1
    строка 2"
    PORT=8080 # инлайн-комментарий
    ENV);
// ['APP_NAME' => 'CloudCastle Env', 'APP_DEBUG' => 'false', ...]

Разбор без побочных эффектов — не пишет в окружение; для записи используйте Хранилище через Dotenv.

Плюсы

  • Полный dotenv-диалект в один проход, без внешних зависимостей.
  • Двойные кавычки поддерживают экранирование \n \r \t \f \v \" \\ \$.
  • Одинарные кавычки — строгий литерал (ничего не подставляется и не экранируется).
  • Многострочные значения в кавычках, включая экранированные кавычки на границе строк.
  • Сохраняется порядок переменных.

Минусы

  • Только текстовый формат .env; YAML/JSON/INI — вне области пакета (для них — отдельные пакеты экосистемы).
  • Не является границей безопасности: недоверенный источник файла нужно проверять до разбора.

✅ Рекомендуется

  • Разбор без записи, когда нужен только массив: (new EnvParser())->parse($content).
  • Хранение секретов и конфигурации в .env вне репозитория (в .gitignore).

❌ Антипаттерны

  • Сборка .env конкатенацией недоверенного ввода — некорректные имена и незакрытые кавычки бросают InvalidValueException.
  • Опора на парсер как на защиту от инъекций — валидируйте источник файла отдельно.

Схема фичи

flowchart LR
    C[".env текст"] -->|"построчно"| P[EnvParser]
    P -->|"кавычки / export / комментарии"| V["валидация имени"]
    V -->|"многострочные значения"| M["массив имя→значение"]
Loading

Жизненный цикл

sequenceDiagram
    participant A as Приложение
    participant P as EnvParser
    A->>P: parse(content)
    loop по строкам
        P->>P: пропустить комментарий/пустую
        P->>P: разобрать ИМЯ=значение
        P->>P: поглотить многострочное значение в кавычках
    end
    P-->>A: array<string, string>
Loading

Сравнение с аналогами

Возможность Env vlucas symfony josegonzalez m1 devcoder 🏆 Победитель
Многострочные значения Env, vlucas, symfony
Инлайн-комментарии ⚠️ Паритет
Одинарные кавычки (литерал) ⚠️ Паритет
Ноль зависимостей ⚠️ Env, symfony, m1, devcoder

Clone this wiki locally