Переменные среды не передаются из .htaccess в PHP

Я пытаюсь передать переменную окружения от .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') = 

Вещи, которые я исключал:

  1. mod_env не установлен / включен хостом. Не может быть, потому что тогда SetEnv не будет распознан, и я получаю 500 при обработке .htaccess.

  2. AllowOverrides в httpd.conf для этого каталога не включает FileInfo . Не может быть, потому что тогда Apache выбрал бы ошибку «SetEnv не разрешен здесь» при встрече с директивой SetEnv и я снова получу 500.

  3. variables_order в php.ini не включает 'E'. Это объясняет, что $_ENV пусто (оно есть), но не почему getenv() не возвращает значения для этих переменных.

  4. Вся окружающая среда прикручена. Не может быть, потому что 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')); 

Как только вы это сделаете, он должен работать по своему желанию.