Компонент Dotenv

Компонент Dotenv

Компонент Dotenv анализирует файлы .env, чтобы сделать переменные окружения, хранящиеся в них, доступными через getenv(), $_ENV или $_SERVER.

Установка

1
$ composer require symfony/dotenv

Также вы можете клонировать репозиторий https://github.com/symfony/dotenv.

Note

Если вы устанавливаете этот компонент вне приложения Symfony, вам нужно подключить файл vendor/autoload.php в вашем коде для включения механизма автозагрузки классов, предоставляемых Composer. Детальнее читайте в этой статье.

Применение

Чувствительная информация и настройки, зависящие от окружения, должны быть определены как переменные окружения (как рекомендовано для двенадцатифакторных приложений). Использование файла .env для хранения этих переменных окружения облегчает разработку и управление CI, храня их в одном "стандартном" месте и независимо от стека технологии, который вы используете (например, Nginx против встроенного PHP сервера).

Note

PHP имеет множество разных реализаций этой "схемы". Цель этой реализации заключается в дублировании того, что бы делал source .env. Он пытается быть максимально похожим на стандартное базовое поведение (а это значит, к примеру, отсутствие валидации значений).

Загрузите файл .env в вашем PHP-приложении через Dotenv::load():

1
2
3
4
5
6
7
use Symfony\Component\Dotenv\Dotenv;

$dotenv = new Dotenv();
$dotenv->load(__DIR__.'/.env');

// Вы можете также загрузить несколько файлов
$dotenv->load(__DIR__.'/.env', __DIR__.'/.env.dev');

Учитывая следующее содержимое файла .env:

1
2
3
# .env
DB_USER=root
DB_PASS=pass

Получите доступ к значению с помощью getenv() в вашем коде:

1
2
$dbUser = getenv('DB_USER');
// вы также можете использовать ``$_ENV`` или ``$_SERVER``

Note

Symfony Dotenv никогда не перезаписывает существующие переменные окружения.

Никогда не стоит хранить файл .env в хранилище вашего кода, так как он может содержать чувствительную информацию; вместо этого, создайте файл .env.dist с разумными настройками по умолчанию.

Note

Symfony Dotenv может быть использован в любом окружении вашего приложения: разработки, тестирования, staging и даже production. Но, в production рекомендуется настраивать настоящие переменные окружения для избежания замедления из-за обработки файла .env при каждом запросе.

Так как файл .env является обычным сценарием оболочки, вы можете source его в ваши собственные сценарии оболочки:

1
source .env

Добавьте комментарии с префиксом #:

1
2
3
# Сертификаты DB
DB_USER=root
DB_PASS=pass # Это секретный пароль

Используйте переменные окружения в значениях, добавив к ним префикс $:

1
2
DB_USER=root
DB_PASS=${DB_USER}pass # Include the user as a password prefix

Встройте команды через $() (не поддерживается в Windows):

1
START_TIME=$(date)

Note

Note that using $() might not work depending on your shell.