variable manejo globales entorno php apache environment-variables

manejo - variables globales php 7



Cómo establecer variables de entorno global para PHP (3)

Así que supongo que tienes un archivo de configuración global en alguna parte. ¿Por qué no poner una constante en ese archivo que puede cambiar? Sería mucho más fácil que tratar de establecer algo en el nivel del servidor.

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

He leído la pregunta / respuestas here pero no entiendo cómo establecer variables en / etc / environment . Si edito el archivo, ¿necesito reiniciar mi máquina o simplemente desconectarme de mi usuario actual (o iniciar sesión en uno nuevo?).

Quiero establecer una variable global para indicar que los sitios web en mi máquina están en modo ''desarrollo'' o ''prueba''. No quiero tener que configurar esto para cada proyecto (ya sea que use PHP, Java / Tomcat, NodeJS, etc.). Soy consciente de que (para Apache) puedo configurar la variable de entorno de las siguientes maneras:

  1. directamente desde php con putenv() (esto parece inútil ya que quiero evitar la lógica que intenta averiguar en qué servidor están los archivos)
  2. utilizando .htaccess SetEnv ENVIRONMENT ''local'' (esto me exigiría duplicar este archivo / código para cada servidor, no ideal)
  3. utilizando una directiva de host virtual SetEnv ENVIRONMENT ''local'' (si estoy usando un host virtual, que en casi todos los casos soy, pero de nuevo me exige copiar / pegar código una y otra vez)
  4. en httpd-conf SetEnv ENVIRONMENT ''local'' (esto solo se aplicará a apache, y me gustaría que también se aplique a los servidores de NodeJS)

No estoy diciendo que no puedo hacer # 4 (y aplicar # 3 selectivamente a los servidores de NodeJS). Pero estoy pensando que esta es una buena razón para usar / etc / environment. Como dije antes, he editado el archivo (después de crearlo) y probé las siguientes combinaciones, ninguna de las cuales pareció funcionar:

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

Digo que ninguno de ellos funcionó porque no encontré la variable en el resultado de:

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


Lo que quiere hacer es usar un archivo de configuración de Apache. Necesitará acceder a una carpeta de configuración y al archivo httpd.conf (o versión modificada). A continuación, puede configurar el httpd.conf para cargar dinámicamente los archivos de configuración utilizando este enfoque

Include conf.d/*.conf

Dentro de la carpeta conf.d, coloca los archivos de configuración de entorno específicos.

Ejemplo de server-environment-dev.conf:

SetEnv ENVIRONMENT "local"

Ejemplo de server-environment-prod.conf:

SetEnv ENVIRONMENT "production"

Estas configuraciones se mostrarán en su código php como variables de entorno disponibles. Este enfoque le permite mantener sus archivos vhost, .htaccess y sus otros archivos de configuración independientemente del entorno.

etc / environment, etc / profile.d, .bash_profile, .profile, etc. PHP no puede leer los archivos en Apache debido a algunas limitaciones de proceso / usuario. Puede bash, smash, bloquear las variables todo lo que quiera y verlas configuradas en su terminal, pero no aparecerán en phpinfo () a menos que lo configure a través de uno de los archivos de configuración de Apache.

Para NodeJS puede iniciar la aplicación que pasa en su variable de entorno o puede configurar NODE_ENV de múltiples maneras, incluya su archivo .bash_profile y posiblemente etc / environment si desea ser independiente del usuario.

Una buena lectura para Node: http://www.hacksparrow.com/running-express-js-in-production-mode.html


Si aún no puede obtener sus variables de entorno:

es posible que necesite editar su httpd.conf real en

~ / Library / Application Support / appsolute / MAMP PRO /

en lugar de

/ Aplicaciones / MAMP / conf / apache /

También es posible que necesite usar getenv () en lugar de $ _ENV