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:
putenv()
(cela semble inutile car je veux éviter la logique qui essaie de comprendre sur quel serveur se trouvent les fichiers)SetEnv ENVIRONMENT 'local'
(cela m'obligerait à dupliquer ce fichier/code pour chaque serveur, pas idéal)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)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'));
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
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';
}
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