Definimos una variable de entorno (ENVPHP) y la usamos en nuestros archivos de configuración XML, de modo que los parámetros de DB correctos se cargan siempre que defina la variable de entorno ENVPHP correcta. Al usar XML puede extender (o anular) sus parámetros comunes con los de los entornos específicos.
es decir. la configuración es el siguiente:
<?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>
Y para cargar la configuración, Tengo el siguiente en mi rutina de carga (en realidad, en una clase de singleton de la aplicación):
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;
}
En código PHP si quiero para hacer algunas cosas solo para entornos específicos, entonces uso Application :: getEnv() para verificar en qué entorno estoy y ejecutar el código que quiero de acuerdo con él.
BTW La variable de entorno ENVPHP se puede establecer en su archivo de configuración de apache utilizando, por ejemplo. SetEnv ENVPHP "dev"
dentro de su contenedor VirtualHost. Para los scripts PHP CLI se debe configurar como una variable de entorno del sistema operativo ...
SetEnvIf Host def.example.com APPLICATION_ENV = la distribución funciona para mí – Yeroon
mejor manera parece ser: SetEnvIf HOST^abc.example.com $ APPLICATION_ENV = producción ... – Kamil