管理两个数据库

时间:2015-01-15 19:08:46

标签: php mysql database configuration config

我的项目中有一个配置文件(.php),其中包含一个包含所有项目设置的数组。该数组的结构类似于:

'db' =>
    'prod' =>
        'host'     => ''
        'dbname'   => ''
        'username' => ''
        'password' => ''
    'local' =>
        'host'     => ''
        'dbname'   => ''
        'username' => ''
        'password' => ''
'other' => 'settings'

我的问题是:我将如何管理这些双重连接信息?

我是否应该在此文件的后面,如果我在本地,请将本地信息放在prod数组中?或者我应该使用多个文件进行配置,并在此config.php中包含好的文件(然后我会将其包含在此项目的每个文件中)?

你会怎么做?

谢谢。

2 个答案:

答案 0 :(得分:1)

正如@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');

如果您想了解更多相关信息,请阅读以下内容: Set Application_ENV via virtual host config and read this in PHP

答案 1 :(得分:0)

通过使用@Dagon的评论和@Pere Pages的答案,我找到了一个适合我的解决方案:

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

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

prodlocal中,我设置了适合每个环境的设置(use中为空的设置)。

在同一个文件中,我会查看use(foreach)的每一行,对于空行,我会使用来自prodlocal的相应值填充它们,取决于我的APPLICATION_ENV(在我的计算机上设置为local。)

谢谢。