web-dev-qa-db-fra.com

Définissez Application_ENV via l'hôte virtuel config et lisez-le dans PHP

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?

45
Nikita Fedyashev

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

ou juste

  • 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 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.

43
Gordon

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)
10
Pascal MARTIN

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

0
O_o lovesCandy

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. 

0
Firman Syah