Я пытаюсь передать переменную окружения от .htaccess до PHP. Это отлично работает на моем локальном сервере WAMP, но на сервере, где размещен мой веб-сайт, он безрезультатен.
Вот моя тестовая конфигурация:
.htaccess:
SetEnv TEST_VARIABLE test_value 
test.php:
 <pre> getenv('TEST_VARIABLE') = <?php print getenv('TEST_VARIABLE'); ?> getenv('REDIRECT_TEST_VARIABLE') = <?php print getenv('REDIRECT_TEST_VARIABLE'); ?> </pre> 
На моем локальном сервере правильное возвращение test.php:
 getenv('TEST_VARIABLE') = test_value getenv('REDIRECT_TEST_VARIABLE') = 
Но на сервере производства он возвращает:
 getenv('TEST_VARIABLE') = getenv('REDIRECT_TEST_VARIABLE') = 
Вещи, которые я исключал:
  mod_env не установлен / включен хостом.  Не может быть, потому что тогда SetEnv не будет распознан, и я получаю 500 при обработке .htaccess. 
  AllowOverrides в httpd.conf для этого каталога не включает FileInfo .  Не может быть, потому что тогда Apache выбрал бы ошибку «SetEnv не разрешен здесь» при встрече с директивой SetEnv и я снова получу 500. 
  variables_order в php.ini не включает 'E'.  Это объясняет, что $_ENV пусто (оно есть), но не почему getenv() не возвращает значения для этих переменных. 
  Вся окружающая среда прикручена.  Не может быть, потому что getenv('PATH') и getenv('SERVER_NAME') возвращают действительные значения. 
На данный момент я не понимаю, какая конфигурация может быть причиной этого.
Я не думаю, что использование setenv обычно работает в .htaccess. Это команда сценария оболочки (bash, C shell и т. Д.). Если ваш сервер поддерживает setenv, в соответствии с https://kb.mediatemple.net/questions/36/Using+Environment+Variables+in+PHP#gs вам нужно, чтобы имя переменной начиналось с HTTP_.
Если вы используете домашний сервер на Mac или имеете suEXEC, есть меры безопасности, чтобы удалить любые переменные среды, отличные от HTTP, которые не определены, поэтому они не будут отображаться в $ _ENV ['APPLICATION_ENV']. Вы можете, однако, обращаться к ним через собственную PHP-функцию, чтобы получить то же самое.
 $var = apache_getenv('APPLICATION_ENV'); 
Эта функция получит любую переменную среды, определенную с помощью SetEnv в вашем файле .htaccess, или любую переменную среды, заданную в php.ini, даже если PHP удалит их из переменной $ _ENV.
Затем вы можете определить переменную окружения в PHP, если хотите, хотя и не рекомендуется.
 $_ENV['APPLICATION_ENV'] = apache_getenv('APPLICATION_ENV'); 
Или лучшее решение: просто определите глобальное:
 define('APPLICATION_ENV', apache_getenv('APPLICATION_ENV')); 
Как только вы это сделаете, он должен работать по своему желанию.