J'aime comment cela fonctionne dans Zend Framework. Je peux savoir quel environnement j'utilise actuellement en vérifiant la constante APPLICATION_ENV dans mon contrôleur.
<VirtualHost *:80>
#ServerName
#DocumentRoot
SetEnv APPLICATION_ENV "development"
# Directory
</VirtualHost>
Mais malheureusement, je ne peux pas utiliser ZF dans mon projet actuel. Comment puis-je vérifier cette variable d'environnement dans mon code PHP?
Comme SetEnv définit la valeur de l'environnement Apache, vous pouvez l'obtenir
Apache_getenv
- Récupère une variable Apache subprocess_envou juste
getenv
- Obtient la valeur d'une variable d'environnementSi vous regardez public/index.php
dans un projet ZF, vous verrez que ZF utilise getenv
:
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ?
getenv('APPLICATION_ENV') :
'production'));
Une alternative souvent utilisée serait de lire le nom d'hôte depuis PHP et de définir la constante en conséquence:
if(!defined('APPLICATION_ENV')) {
if(FALSE === stripos($_SERVER['SERVER_NAME'], 'www.yourdomain.com')) {
define(APPLICATION_ENV, 'development');
} else {
define(APPLICATION_ENV, 'production');
}
}
De cette façon, vous n’avez pas à vous fier au paramètre d’environnement.
SetEnv
définit une variable d'environnement.
Une fois que ceci a été défini (soit dans la configuration de votre Apache, soit au niveau du système), vous pouvez lire sa valeur à l'aide de la fonction getenv
:
echo getenv('APPLICATION_ENV');
Par exemple, si vous utilisez ceci dans votre fichier .htaccess
:
SetEnv TEST glop
Vous pouvez utiliser cette portion de code PHP:
var_dump(getenv('TEST'));
Et vous aurez:
string 'glop' (length=4)
vous pouvez également y accéder à partir de la variable $_SERVER
.
J'ai eu le même problème alors je l'ai résolu. Le moyen de résoudre le problème consiste à déclarer toutes les variables dans un script init Apache.
J'utilise Apache sur centos et le script init est situé dans /etc/init.d/httpd
Ajoutez ce code, mais changez-le pour répondre à votre cas particulier.
Oracle_HOSTNAME=ora11g.home.com; export Oracle_HOSTNAME
Oracle_BASE=/u01/app/Oracle; export Oracle_BASE
Oracle_HOME=$Oracle_BASE/product/11.2.0/db_1; export Oracle_HOME
Oracle_SID=ora11g; export Oracle_SID
Oracle_TERM=xterm; export Oracle_TERM
PATH=$Oracle_HOME/bin:/usr/sbin:$PATH; export PATH
LD_LIBRARY_PATH=$Oracle_HOME/lib:/lib:/usr/lib;
export LD_LIBRARY_PATH
CLASSPATH=$Oracle_HOME/JRE:$Oracle_HOME/jlib:$Oracle_HOME/rdbms/jlib;
export CLASSPATH
Cela a résolu mon problème. J'espère que ça aide.