У меня есть файл конфигурации (.php) в моем проекте, который содержит массив с настройками для всего проекта. Этот массив имеет структуру, подобную этой:
'db' =>
'prod' =>
'host' => ''
'dbname' => ''
'username' => ''
'password' => ''
'local' =>
'host' => ''
'dbname' => ''
'username' => ''
'password' => ''
'other' => 'settings'
Мой вопрос: как я буду управлять информацией о двойном соединении?
Должен ли я позже в этом файле, если я нахожусь в локальном, поместить локальную информацию в массиве prod? Или я должен использовать несколько файлов для конфигурации и включить хороший файл в этот config.php (который я бы затем включил в каждый файл этого проекта)?
Как бы вы это сделали?
Спасибо.
Как говорит @Dagon, обычно вы обнаруживаете, в какой среде вы находитесь, и читаете ту или иную конфигурацию.
Вы можете обнаружить это через PHP. Вы можете прочитать имя хоста из PHP и определить константу соответственно:
if(!defined('APPLICATION_ENV')) {
if(FALSE === stripos($_SERVER['SERVER_NAME']), 'www.example.com') {
define(APPLICATION_ENV, 'development');
} else {
define(APPLICATION_ENV, 'production');
}
}
Таким образом, вам совсем не нужно полагаться на настройки среды.
Как только это будет установлено (либо в конфигурации вашего Apache, либо на системном уровне), вы можете прочитать его значение с помощью функции getenv:
echo getenv('APPLICATION_ENV');
Если вы хотите узнать больше об этом, вы можете прочитать этот пост:
Установите Application_ENV через конфигурацию виртуального хоста и прочитайте это на PHP
Используя комментарий @Dagon и ответ @Pere Pages, я пришел к решению, которое мне подходит:
В моем $config
массив, у меня есть 3 массива: use
, prod
а также local
,
В use
Я могу поставить параметры, которые не будут меняться в зависимости от среды (производство или локальный хост), и у меня также есть параметры, которые меняются в зависимости от среды, но они пусты.
В prod
а также local
У меня есть настройки, адаптированные для каждой среды (те, которые в use
).
В том же файле я перехожу каждую строку use
(foreach), а для пустых я заполняю их соответствующим значением, полученным из prod
или же local
в зависимости от моего APPLICATION_ENV
(установлен на local
на моей машине).
Спасибо.