Использование переменных окружения (env) в Bitrix
Назад

Использование переменных окружения (env) в Bitrix

Переменные окружения (Environment Variables, env) - это мощный инструмент для настройки и конфигурирования приложений, включая Bitrix. Они позволяют скрывать конфиденциальную информацию, такую как ключи API, пароли и другие данные, и позволяют управлять настройками вашего проекта более гибко.

В этой статье мы рассмотрим, как использовать переменные окружения в Bitrix для улучшения безопасности и управляемости вашего веб-проекта.

Почему полезно использовать env в Bitrix?

  1. Безопасность: Использование переменных окружения позволяет скрывать конфиденциальные данные от посторонних. Важно не хранить такие данные в открытом виде в коде приложения, так как это может привести к утечкам данных или уязвимостям.
  2. Портабельность: Переменные окружения делают ваше приложение более портативным. Вы можете легко перенести его на другой сервер или настроить его на разных средах (разработка, тестирование, продакшн) без изменения кода.
  3. Управляемость: При необходимости изменения настроек приложения, вы можете просто изменить значения переменных окружения, без необходимости изменения и перекомпиляции кода.

С чего начать?

Для начала Вам потребуется установить composer, который мы уже разбирали в прошлой статье.

Установить библиотеку с помощью команды в SSH консоли:

              composer require vlucas/phpdotenv
         

Далее вам нужно установить переменные окружения на вашем сервере. Это можно сделать в настройках сервера или в файле .env  (его требуется создать в корне сайта).

Например, если у вас есть переменная API_KEY, содержащая строку API ключа для какого-либо сервиса, вы можете установить ее следующим образом:

              API_KEY=123321
         

Далее нам потребуется защитить  .env  файл от любопытных глаз. Для этого нам потребуется добавить правило в файл .htaccess:

              <Files ~ "^.*\.([Ee][Nn][Vv])">
    order allow,deny
    deny from all
    satisfy all
</Files>
         

После установки данного правила, файл перестанет быть доступным для внешних пользователей. Протестировать это можно в браузере по ссылке: https://вашсайт.ru/.env 

Как теперь использовать переменные в коде Bitrix?

Для этого потребуется добавить несколько функций (например в файл init.php).

              <?php
use Dotenv\Dotenv;

/**
 * Подключение composer
 */
require __DIR__ . '/../vendor/autoload.php';

/**
 * Подключение env (в функции createImmutable укажите путь, где расположен .env файл)
 */
$dotenv = Dotenv::createImmutable(__DIR__ . '/../../');
$dotenv->load();

if (!function_exists('env')) {
    /**
     * Перевод типа env переменной
     *
     * @param string $key
     * @return bool|mixed|string|null
     */
    function env(string $key) {
        $value = $_ENV[$key];
        if ($value === false) { return $value; }

        switch (strtolower($value)) {
            case 'true':
            case '(true)':
                return true;

            case 'false':
            case '(false)':
                return false;

            case 'empty':
            case '(empty)':
                return '';

            case 'null':
            case '(null)':
                return null;
        }

        if (startsWith($value,'"') && endsWith($value,'"')) {
            return substr($value, 1, -1);
        }

        return $value;
    }
}

/**
 * Проверяет, начинается ли строка с заданной подстроки
 *
 * @param string $haystack
 * @param string $needle
 * @return bool
 */
function startsWith(string $haystack, string $needle): bool {
    $length = strlen($needle);

    return substr($haystack, 0, $length) === $needle;
}

/**
 * Проверяет, заканчивается ли строка с заданной подстроки
 *
 * @param string $haystack
 * @param string $needle
 * @return bool
 */
function endsWith(string $haystack, string $needle): bool {
    $length = strlen($needle);
    if(!$length) { return true; }

    return substr($haystack, -$length) === $needle;
}
         

Если вы используете PHP > 8 версии, то можно убрать функции startsWith и endsWith и заменить их на str_starts_with и str_ends_with.

После всех вышеперечисленных манипуляций - функционал переменных окружения готов и у Вас есть возможность использовать его где угодно с помощью функции env:

              echo env('API_KEY');
         

Заключение

Использование переменных окружения в Bitrix - это хороший способ улучшить безопасность, управляемость и портабельность вашего веб-проекта. Они позволяют хранить конфиденциальные данные в защищенном месте и легко настраивать приложение для разных сред выполнения.

Не забывайте, что правильное управление переменными окружения и их безопасность - ключевой момент в обеспечении надежности вашего проекта.

Отправить запрос

Напишите нам и мы свяжемся с вами сразу после ознакомления с запросом (в рабочее время ~10 минут ожидания)

Россия, г. Калининград, ул.Уральская, 18, этаж 4, оф. 4, оф. 6