50 votes

Définir Application_ENV via la configuration de l'hôte virtuel et lire ceci en PHP

J'aime la façon dont 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 ?

47voto

Gordon Points 156415

Depuis SetEnv définit la valeur de l'environnement d'Apache, vous pouvez l'obtenir avec

ou simplement

  • getenv - Obtient la valeur d'une variable d'environnement

Si 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 à partir de 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 besoin de vous fier aux paramètres de l'environnement.

11voto

Pascal MARTIN Points 195780

SetEnv définit une variable d'environnement.

Une fois ce réglage effectué (soit dans la configuration de votre Apache, soit au niveau du système) vous pouvez lire sa valeur à l'aide de la fonction getenv fonction :

echo getenv('APPLICATION_ENV');

Par exemple, si vous utilisez ceci dans votre .htaccess fichier :

SetEnv TEST glop

Vous pouvez utiliser cette partie du code PHP :

var_dump(getenv('TEST'));

Et vous obtiendrez :

string 'glop' (length=4)

1voto

O_o lovesCandy Points 89

Vous pouvez également y accéder à partir de la page $_SERVER variable.

0voto

Firman Syah Points 1

J'ai eu le même problème puis je l'ai résolu. La façon de résoudre le problème est de déclarer toutes les variables dans un apache init script.

J'utilise apache sur centos et l'init script est situé dans /etc/init.d/httpd

Ajoutez ce code, mais modifiez-le pour qu'il corresponde à 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 cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X