Где хранить конфигурацию php приложения?
2019-02-01 17:04:09
Самый оптимальный вариант хранения настроек php приложения. В примерах для начинающих разработчиков, конфигурация приложения задаётся в начале исполняемого файла. Но для серьёзного Web приложения с множеством настроек такой вид конфигурации не удобен.
Рассмотрим на простом примере как оптимизировать хранение настроек приложения.
Создадим файл index.php со следующим содержимым:
// Настройки для подключения к базе данных
$dbHost = 'localhost';
$dbUser = 'tester';
$dbPassword = 'fB8vh83gHj4';
$dbDatabase = 'my_base';
// Настройки для отправки почты через SMTP
$mailerHost = 'smtp.yandex.ru';
$mailerUsername = 'sender@test.ru';
$mailerPassword = 'fdDj3gf4Hbh';
$mailerPort = '465';
$mailerEncryption = 'SSL';
Мы видим 2 группы переменных: первая для подключения к базе данных, а вторая для отправки письма по smtp протоколу. Избавимся от многочисленных переменных, объединив все значения в один многомерный ассоциативный массив.
$config = [
'db' => [
'host' => 'localhost',
'user' => 'tester',
'password' => 'fB8vh83gHj4',
'database' => 'my_base'
],
'mailer' => [
'host' => 'smtp.yandex.ru',
'username' => 'sender@test.ru',
'password' => 'Vbs3Hts42sdh',
'port' => '465',
'encryption' => 'SSL'
]
];
Уже лучше. В современных Web приложениях конфигурацию принято хранить в отдельном файле / файлах. Давайте создадим файл config.php, перенесём туда наш массив и подгрузим его в index.php
Подключать будем с помощью конструкциии require, использовав её полезную особенность - возможно выполнить выражение return внутри включаемого файла. Делать это нужно следующим образом:
// Код файла config.php
return [
'db' => [
'host' => 'localhost',
'user' => 'tester',
'password' => 'fB8vh83gHj4',
'database' => 'my_base'
],
'mailer' => [
'host' => 'smtp.yandex.ru',
'username' => 'sender@test.ru',
'password' => 'Vbs3Hts42sdh',
'port' => '465',
'encryption' => 'SSL'
]
];
В файле конфигурации мы сделали return нашего массива. А в index.php присвоим этот массив переменной $config, используя выражение require.
// Код файла index.php
$config = require 'config.php';
print_r($config);
С помощью print_r выведем результат. Вот что у нас получилось:
Если конфиг слишком большой, разбивать его на несколько файлов и собирайте с помощью require.
Хранение файла конфигурации в репозитории
При работе с git или mercurial репозиторием нужно придерживаться следующему правилу - не хранить реальные настройки приложения в репозитории. Добавлять в репозиторий только структуру файла конфигурации, так называемый скелет.
Это нужно сделать по следующим причинам:
- При хранении боевых настроек в репозитории они могут попасть не в те руки.
- Если вы работаете в команде, у каждого её члена должны быть свои индивидуальный настройки (например конфиг для подключения к базе данных на локальном компьютере).
Перейдём к практике. Создайте файл "config.sample.php". Скопируйте туда созержимое вашего файла конфигурации и удалите как минимум значения важных (в нашем случае - паролей).
// Код файла config.sample.php
return [
'db' => [
'host' => 'localhost',
'user' => '',
'password' => '',
'database' => ''
],
'mailer' => [
'host' => '',
'username' => '',
'password' => '',
'port' => '465',
'encryption' => 'SSL'
]
];
Добавьте файл config.sample.php в репозиторий. А боевой файл конфигурации config.php не должен туда попадать, поэтому исключите его из индексации, добавив строчку в файл ".gitignore":
config.php