管理两个数据库

Manage two databases

我的项目中有一个配置文件 (.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');

如果您想了解更多信息,可以阅读此 post: Set Application_ENV via virtual host config and read this in PHP

通过@Dagon 的评论和@Pere Pages 的回答,我得出了一个适合我的解决方案:

在我的 $config 数组中,我有 3 个数组:useprodlocal

use中,我可以放置不会根据环境(生产或本地主机)而改变的设置,我也有根据环境而改变的设置,但它们是空的。

prodlocal中,我有适合每个环境的设置(在use中是空的)。

在同一个文件中,我检查了 use (foreach) 的每一行,对于空行,我用来自 prod 或 [=13= 的适当值填充它们],取决于我的 APPLICATION_ENV(在我的机器上设置为 local)。

谢谢。