Переменные окружения – это ассоциативный массив значений, который импортируются в глобальное пространство имен PHP, из среды, в которой работает интерпретатор PHP. Таким образом можно получить доступ к таким переменным из любой точки скрипта,

Популярная библиотека (например включена в ядро фреймворка Laravel-5) «PHP dotenv» позволяет добавлять к переменным среды нужные данные (обычно указываются в файле .env), что предоставляет к ним удобный доступ и позволяет не хранить конфиденциальные данные в своем коде.
Страница расширения: https://github.com/vlucas/phpdotenv.


Установка библиотеки
composer require vlucas/phpdotenv --prefer-dist


Пример файла .env
### Database
DB_HOST     = "localhost"
DB_NAME     = "name-dev"
DB_USER     = "root"
DB_PASSWORD = ""

### Email
ADMIN_EMAIL = "admin@mail.com"

Не забудьте добавить .env в .gitignore, иначе ваши учётные данные будут доступны через репозиторий.
Если над проектом работают несколько разработчиков, то желательно добавить шаблонный файл (что бы другие разработчики видели какие переменные нужно указать), например кроме .env создать файл .env.example c пустыми значениями (или значениями по-умолчанию).


Использование.
Создаем объект:
$dotenv = new \Dotenv\Dotenv(dirname(__FILE__));

В качестве обязательного аргумента передается путь к файлу .env
В данном примере считается, что данный файл расположен в том же каталоге, что и данная строка кода.
На уровень выше:
$dotenv = new \Dotenv\Dotenv(__DIR__);

При желании можно передать имя файла как второй параметр, если вы хотите назвать файл не .env

Загружаем данные из файла .env:
$dotenv->load();

Загрузить данные из файла .env в переменные среды нужно на начальном этапе загрузки приложения. Для этого можно создать файл env.php, который будет включать создание объекта класса Dotenv с загрузкой данных (показано выше) и подключить его, например, в index.php после подключения автозагрузчика Composer:
// Environment
require(__DIR__ . '/../../common/env.php');



Получить данные можно одним из 3-х способов (предпочтительнее первый):
echo getenv('ADMIN_EMAIL'); //admin@mail.com
echo $_ENV ['ADMIN_EMAIL'];  //admin@mail.com
echo $_SERVER ['ADMIN_EMAIL'];  //admin@mail.com
т.е. в нужном конфигурационном файле или в др. месте получаем данные:
'connections' => array(
    'mysql' => array(
        'driver'    => 'mysql',
        'host'      => getenv('DB_HOST'),
        'database'  => getenv('DB_DATABASE'),
        'username'  => getenv('DB_USERNAME'),
        'password'  => getenv('DB_PASSWORD'),
        'charset'   => 'utf8',
        'prefix'    => '',
    ),
),

Если проект предусматривает использование нескольких сред разработки, например «development» и «production», то можно создать несколько файлов .env и сделать, чтобы они подключались в соответствии с нужной средой разработки. Например, среда development будет загружать файл .env.development.php, если такой существует, а среда production всегда использует файл .env.php.



При использовании метода load, расширение Dotenv не будет перезаписывать существующие переменные среды, которые уже установлены.
Если вы хотите, чтобы Dotenv перезаписывал существующие переменные среды, используйте overload вместо load:
$dotenv->overload ();

Можно сделать обязательными некоторые параметры из файла .env.
Один обязательный параметр:
$dotenv->required('DATABASE_DSN');
Несколько обязательных параметров:
$dotenv->required(['DB_HOST','DB_NAME','DB_USER','DB_PASSWORD']);

В случае отсутствия параметра будет выброшено исключение, например:
Fatal error: Uncaught Dotenv\Exception\ValidationException: One or more environment variables failed assertions: DATABASE_DSN is missing.

Так же можно убедиться, что параметр содержит значение, а не пуст:
$dotenv->required('DATABASE_DSN')->notEmpty();

Проверка, что параметр содержит целочисленное значение:
$dotenv->required('FOO')->isInteger();

Указать допустимые значения параметров:
$dotenv->required('SESSION_STORE')->allowedValues(['Filesystem','Memcached']);