Las variables de entorno no se pasan desde .htaccess a PHP

Estoy intentando pasar una variable de entorno de .htaccess a PHP. Esto funciona bien en mi servidor WAMP local, pero en el servidor donde está alojado mi sitio web, falla sin razón.

Aquí está mi configuración de prueba:

.htaccess:

SetEnv TEST_VARIABLE test_value 

test.php:

 
 getenv('TEST_VARIABLE') =  getenv('REDIRECT_TEST_VARIABLE') =  

En mi servidor local, obtener test.php devuelve correctamente:

 getenv('TEST_VARIABLE') = test_value getenv('REDIRECT_TEST_VARIABLE') = 

Pero en el servidor de producción, regresa:

 getenv('TEST_VARIABLE') = getenv('REDIRECT_TEST_VARIABLE') = 

Cosas que he descartado:

  1. mod_env no está instalado / habilitado por el host. No puede ser, porque entonces SetEnv no sería reconocido y obtendría 500 mientras procesaba el .htaccess.

  2. AllowOverrides en httpd.conf para este directorio no incluye FileInfo . No puede ser, porque entonces Apache lanzaría un error “SetEnv no permitido aquí” al encontrar la directiva SetEnv y obtendría un 500 nuevamente.

  3. variables_order en php.ini no incluye ‘E’. Esto explicaría que $_ENV superglobal esté vacío (lo cual es), pero no por qué getenv() no devuelve valores para estas variables.

  4. Todo el entorno está jodido. No puede ser, porque getenv('PATH') y getenv('SERVER_NAME') aún devuelven valores válidos.

En este punto, no sé qué configuración podría estar causando esto.

No creo que el uso de setenv normalmente funcione en .htaccess. Es un comando de script de shell (bash, C shell, etc.). Si su servidor admite setenv, de acuerdo con https://kb.mediatemple.net/questions/36/Using+Environment+Variables+in+PHP#gs necesita que el nombre de la variable comience con HTTP_.

Si está ejecutando su servidor doméstico en una Mac o tiene suEXEC habilitado, existen medidas de seguridad para eliminar cualquier variable de entorno no http que esté definida, por lo tanto, no aparecerán en $ _ENV [‘APPLICATION_ENV’]. PUEDE, sin embargo acceder a estos a través de una función PHP nativa para obtener lo mismo.

 $var = apache_getenv('APPLICATION_ENV'); 

Esa función obtendrá cualquier variable de entorno definida con SetEnv en su archivo .htaccess, o cualquier variable de entorno que esté configurada en php.ini, incluso si PHP las elimina de la variable $ _ENV.

Luego puede definir la variable de entorno dentro de PHP, aunque no se recomienda.

 $_ENV['APPLICATION_ENV'] = apache_getenv('APPLICATION_ENV'); 

O la mejor solución: simplemente defina un global:

 define('APPLICATION_ENV', apache_getenv('APPLICATION_ENV')); 

Una vez que lo hagas, debería funcionar como desees.