Переменные среды PHP и Apache - PullRequest
8 голосов
/ 31 мая 2010

Я хочу передать переменную окружения в linux в apache при запуске.

экспорт MYVAR = 5 - Я определяю переменную окружения в командной строке

PassEnv MYVAR --set apache для импорта переменной в конфигурационный файл apache

перезапуск apachectl - при перезапуске apache я не получаю сообщение об ошибке. Однако я заметил что если я не создаю переменную окружения на своем первом шаге, я получаю предупреждающее сообщение, поэтому должен работать здесь

echo $ _SERVER ['MYVAR'] - я пытаюсь получить доступ к переменной окружения в PHP, но она не определена

Я заметил, что если я пытаюсь передать PassEnv переменную окружения, которая уже выходит (ту, которую я сам не создал), она работает нормально. Директива SetEnv также работает нормально.

Я бы очень хотел передать переменную окружения в apache на лету, не записывая ее в файл. Помощь высоко ценится.

Я использую CentOS, PHP5 и Apache2.

Спасибо.

обновление Кажется, переменная среды передается, если я вызываю запуск apache напрямую через httpd и не использую apachectl, который является сценарием оболочки. Я бы подумал, что «экспорт» будет экспортировать переменную в сценарий оболочки нет? Я не гуру Linux, поэтому извините за недостаток знаний.

Ответы [ 3 ]

11 голосов
/ 31 мая 2010

Если вы хотите, чтобы переменная среды передавалась в apache, вы должны убедиться, что указанная переменная среды определена для среды, в которой работает apache. Для этого проще всего добавить строку export MYVAR=value в envvars (должен быть расположен в / etc / apache2) или скрипт, который запускает apache (в /etc/init.d), и добавьте свой PassEnv MYVAR в нужное место в конфигурации apache

Перезапуск apache должен убедиться, что передана переменная среды MYVAR. AFAIK, вы не сможете изменить значение этой переменной, пока работает Apache ...

Некоторая важная информация для CentOS: http://php.dzone.com/news/inserting-variable-headers-apa&default=false&zid=159&browser=16&mid=0&refresh=0

3 голосов
/ 01 июня 2010

Вы должны получить доступ к переменным окружения, используя суперглобальный $_ENV:

$_ENV['MYVAR']

http://www.php.net/manual/en/reserved.variables.environment.php

Обновление

Ваша переменная может фактически быть ниже $_SERVER, как показано ниже по ссылке. Стоит проверить $_ENV хотя.

Согласно http://www.php.net/manual/en/reserved.variables.environment.php#97105

1 голос
/ 02 июня 2015

Расширить ответ wimvds выше;вы можете изменять переменные окружения, когда Apache работает с модулем SetEnvIf .В частности, директива SetEnvIf указанного модуля.

например,

SetEnvIf Request_URI "^.*\/foobar.*$" FOOBAR="something"

В приведенном выше примере переменная среды $ FOOBAR будет установлена ​​в значение «что-то», если регулярное выражение соответствует URI запроса (в данном случаелюбой URI, содержащий слово "foobar").Вы можете определить это в файле конфигурации вашего хоста (обычно в /etc/apache2/sites-available/mywebsite.conf или что-то подобное).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...