-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Parsing
github-actions[bot] edited this page Jul 16, 2026
·
1 revision
Полный разбор 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["массив имя→значение"]
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>
| Возможность | Env | vlucas | symfony | josegonzalez | m1 | devcoder | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Многострочные значения | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | Env, vlucas, symfony |
| Инлайн-комментарии | ✅ | ✅ | ✅ | ✅ | ❌ | Паритет | |
| Одинарные кавычки (литерал) | ✅ | ✅ | ✅ | ✅ | ✅ | Паритет | |
| Ноль зависимостей | ✅ | ❌ | ✅ | ✅ | ✅ | Env, symfony, m1, devcoder |
CloudCastle Env · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)