環境変数 (ENVPHP) を定義し、これを XML 構成ファイルで使用するため、正しい ENVPHP 環境変数を定義する限り、正しい DB パラメータがロードされます。XML を使用すると、共通のパラメーターを特定の環境用のパラメーターで拡張 (またはオーバーライド) できます。
すなわち。構成は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<application>
<common>
<name>MyApp_name</name>
<code>MyApp_code</code>
<version>MyApp_version</version>
<authentication>
... authentication specific parameters (ie. LDAP connection parameters)
</authentication>
...
</common>
<dev extends="common">
<database>
... DB connection parameters for development
</database>
...
</dev>
<tst extends="common">
<database>
... DB connection parameters for test
</database>
...
</tst>
<prd extends="common">
<database>
... DB connection parameters for production
</database>
...
</prd>
</application>
そして、構成をロードするために、ブートストラップに次のものがあります(実際にはアプリケーションシングルトンクラスにあります):
public static function getEnv()
{
if (self::$env === null) {
self::$env = getenv('ENVPHP');
} else {
return self::$env;
}
}
protected function initConfig ()
{
$configFile = $this->appDir . '/config/application.xml';
if (! is_readable($configFile)) {
throw new Application_Exception('Config file "' . $configFile . '" is not readable');
}
if (false === self::getEnv()) {
throw new Application_Exception('The environment variable "ENVPHP" is not defined');
}
$config = new Zend_Config_Xml($configFile, self::getEnv(), true);
$config->setReadOnly();
Zend_Registry::set('config', $config);
$this->config = $config;
}
PHPコードでは、特定の環境に対してのみ何かをしたい場合は、 Application::getEnv() を使用して現在の環境を確認し、それに応じて必要なコードを実行します。
ところで、ENVPHP 環境変数は、ie を使用して Apache 構成ファイルで設定できます。SetEnv ENVPHP "dev"
VirtualHost コンテナー内。CLI PHPスクリプトの場合、OS環境変数として設定する必要があります...