web-dev-qa-db-fra.com

Comment définir des variables d'environnement globales pour PHP

J'ai lu la question/réponses ici mais je ne comprends pas comment définir des variables dans /etc/environment . Si je modifie le fichier, dois-je redémarrer ma machine ou simplement déconnecter mon utilisateur actuel (ou en ouvrir une nouvelle?).

Je veux définir une variable globale pour indiquer que les sites Web sur ma machine sont en mode "développement" ou "test". Je ne veux pas avoir à définir cela pour chaque projet (qu'il utilise PHP, Java/Tomcat, NodeJS, etc.). Je sais que (pour Apache) je peux définir la variable d'environnement de la manière suivante:

  1. directement à partir de php avec putenv() (cela semble inutile car je veux éviter la logique qui essaie de comprendre sur quel serveur se trouvent les fichiers)
  2. en utilisant .htaccess SetEnv ENVIRONMENT 'local' (cela m'obligerait à dupliquer ce fichier/code pour chaque serveur, pas idéal)
  3. en utilisant une directive Virtual Host SetEnv ENVIRONMENT 'local' (si j'utilise un hôte virtuel, ce que je fais dans presque tous les cas, mais encore une fois, il me faut copier/coller du code encore et encore)
  4. dans httpd-conf SetEnv ENVIRONMENT 'local' (cela ne s'appliquera qu'à Apache, et j'aimerais qu'il s'applique également aux serveurs NodeJS)

Je ne dis pas que je ne peux pas faire # 4 (et appliquer # 3 sélectivement aux serveurs NodeJS). Mais je pense que c'est une bonne raison d'utiliser/etc/environment. Comme je l'ai dit ci-dessus, j'ai édité le fichier (après l'avoir créé pour la première fois) et essayé les combinaisons suivantes, dont aucune ne semblait fonctionner:

ENVIRONMENT='local'
ENVIRONMENT=local
export ENVIRONMENT='local'
export ENVIRONMENT=local

Je dis qu'aucun d'entre eux n'a fonctionné car je n'ai pas trouvé la variable en sortie de:

print_r($_SERVER);
print_r($_ENV);
echo(getenv('ENVIRONMENT'));
21
alyda

Ce que vous voulez faire, c'est utiliser un fichier de configuration Apache. Vous aurez besoin d'accéder à un dossier de configuration et au fichier httpd.conf (ou version modifiée). Vous pouvez ensuite configurer httpd.conf pour charger dynamiquement les fichiers de configuration en utilisant cette approche

Include conf.d/*.conf

Dans le dossier conf.d, vous placez vos fichiers de configuration d'environnement spécifiques.

exemple de server-environment-dev.conf:

SetEnv ENVIRONMENT "local"

exemple de server-environment-prod.conf:

SetEnv ENVIRONMENT "production"

Ces paramètres apparaîtront dans votre code php en tant que variables d'environnement disponibles. Cette approche vous permet de conserver vos fichiers vhost, .htaccess et vos autres fichiers de configuration indépendamment de l'environnement.

etc/environnement, etc/profile.d, .bash_profile, .profile, etc les fichiers ne sont pas lisibles par PHP dans Apache en raison de certaines limitations de processus/utilisateur. Vous pouvez bash, smash, crash the les variables tout ce que vous voulez et les voir définies dans votre terminal mais elles n'apparaîtront pas dans phpinfo () à moins que vous ne les définissiez via l'un des fichiers de configuration d'Apache.

Pour NodeJS, vous pouvez démarrer l'application en transmettant votre variable d'environnement ou vous pouvez définir le NODE_ENV de plusieurs façons, notamment votre fichier .bash_profile et éventuellement etc/environment si vous souhaitez être indépendant de l'utilisateur.

Une bonne lecture pour Node: http://www.hacksparrow.com/running-express-js-in-production-mode.html

42
nopuck4you

Je suppose donc que vous avez un fichier de configuration global quelque part. Pourquoi ne pas mettre une constante dans ce fichier que vous pouvez changer? Serait beaucoup plus facile que d'essayer de définir quelque chose au niveau du serveur.

define('ENVIRONMENT', 'testing');
if(ENVIRONMENT == 'testing') {
   echo 'We\'re just testing';
}
1
Machavity

Si vous ne pouvez toujours pas obtenir vos variables d'environnement:

vous devrez peut-être modifier votre réel httpd.conf dans

~/Bibliothèque/Support d'application/appsolute/MAMP PRO /

au lieu de

/ Applications/MAMP/conf/Apache /

Vous devrez peut-être également utiliser getenv () au lieu de $ _ ENV

0
Sebastien Horin