Может войдёшь?
Черновики Написать статью Профиль

PHP dotenv в Laravel

перевод

Управление окружениями — одна из сложных задач, которую должны решать разработчики при создании и развертывании приложений. Laravel позволяет довольно просто задать конфигурацию для конкретного окружения. Настройка учётных данных различных баз данных с помощью этого метода чрезвычайно проста и делает развертывание лёгким. Однако делая проект общедоступным или с открытым исходным кодом (например, на GitHub), вы не хотите показывать всему миру учётные данные вашей рабочей системы.

Многие рабочие настройки задают какую-либо переменную среды для определения окружения приложения, такие как RAILS_ENV="production" или LARAVEL_ENV="staging". Такие переменные среды являются отличным решением для того, чтобы иметь специфичные для экземпляра значения таких вещей, как API-ключи. Загвоздка этого решения в том, что оно требует вмешательства сис-админа, когда вы хотите добавить новую информацию — как для новых очередей Iron MQ, который вы только что добавили в проект.

К счастью для PHP-разработчиков Ванс Лукас создал библиотеку PHP dotenv, которая может загружать эти переменные из файла .env. Не забудьте добавить .env в ваш .gitignore или другую VCS-ignoring конфигурацию, иначе ваши рабочие учётные данные будут по прежнему доступны. Если вы захотите добавить какой-то шаблонный файл, то я рекомендую .env.example, который показывает, какие переменные надо определить.

Использование dotenv с Laravel

Библиотека dotenv доступна для установки через composer, поэтому процесс установки должен быть знаком для большинства из вас. Выполните следующую команду, чтобы добавить библиотеку в качестве зависимости в ваше Laravel-приложение.

shcomposer require vlucas/phpdotenv --prefer-dist

Загрузка dotenv

Так как переменные, определенные в нашем .env файле будут использоваться в разных местах нашего приложения, мы хотим убедиться, что он загружается как можно раньше в процессе работы нашего приложения, поэтому загрузка будет происходить в директории app/start Laravel-приложения.

Директория app/start содержит стартовые файлы, которые загружаются при запуске Laravel. У нас есть на выбор несколько вариантов загрузки переменных среды. Первый — включение кода в файл global.php. При этом переменные среды будут загружаться для каждого окружения, в котором вы запускаете ваше приложение. Но я хочу запускать его только в рабочей (production) среде. Благодаря Laravel я могу создать файл {environment}.php в app/start, и он будет загружаться при использовании этого окружения, поэтому я создам production.php. Используйте любой подходящий для вас метод/файл, код будет одинаковым.

В стартовом файле настройка начинается с команды библиотеке dotenv загрузить файл .env с указанием директории, в которой он находится.

PHP
Dotenv::load(base_path());

Здесь я говорю dotenv загрузить файл из корневой директории моего Laravel-приложения. Вы точно также можете положить его куда-либо ещё, только убедитесь, что передаёте путь к директории в качестве параметра метода PHPload.

Далее я хочу убедиться, что некоторые переменные доступны в файле .env.

PHP
Dotenv::required(array('DB_HOST''DB_DATABASE''DB_USERNAME''DB_PASSWORD'));

Этот вызов проверит, что все эти переменные загружены. Иначе возникнет PHPRuntimeException.

Использование переменных среды

Как видите, я использовал dotenv для загрузки переменных для моего подключения к БД. Получение этих переменных не отличается от получения других переменных среды и сервера в PHP.

PHP
$DB_NAME getenv('DB_NAME');
$DB_NAME $_ENV['DB_NAME'];
$DB_NAME $_SERVER['DB_NAME'];

Все три метода будут работать, но я предпочитаю и рекомендую использовать первый, так вы не будете обращаться к суперглобальным переменным напрямую.

Теперь я могу изменить мой рабочий файл app/config/database.php, чтобы загружать мои учётные данные из переменных среды.

PHP
'connections' => array(
    
'mysql' => array(
        
'driver'    => 'mysql',
        
'host'      => getenv('DB_HOST'),
        
'database'  => getenv('DB_DATABASE'),
        
'username'  => getenv('DB_USERNAME'),
        
'password'  => getenv('DB_PASSWORD'),
        
'charset'   => 'utf8',
        
'collation' => 'utf8_unicode_ci',
        
'prefix'    => '',
    ),
),

Чисто, настраиваемо, легко читаемо и безопасно. Используя эту библиотеку, вы можете сделать исходный код вашего приложения общедоступным, не беспокоясь, что учётные данные вашей системы будут открыты. Узнать больше о библиотеке можно из документации phpdotenv, а о конфигурации среды — из документации Laravel.

Обновление 13.02.2014

Я только что обнаружил, что Тэйлор встроил загрузку .env файла в ядро. Laravel будет автоматически загружать файл .env.{environment}.php, добавленный в корень вашего приложения, почти так же, как это делает dotenv. Забегая вперед, этот метод должен быть предпочтительнее для загрузки переменных среды, но принципы dotenv всё еще применимы и могут быть использованы и в других проектах не на Laravel.

Как вы считаете, полезен ли этот материал? Да Нет

Комментарии (1)

likemusic

Обновление 08.10.2014

Тейлор удалил собственный код для импорта .env-файла и начиная с версии 5 для этого будет использоваться библиотека Ванс Лукаса PHP dotenv.

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.