2010-05-31 2 views
8

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

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

PassEnv MYVAR --set апач импортировать переменную в конфигурационном файле апача

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

эхом $ _SERVER [ «MYVAR»] --i пытаюсь получить доступ к переменная среды внутри PHP, но она не определена

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

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

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

Спасибо.

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

ответ

10

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

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

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

3

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

$_ENV['MYVAR']

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

Update

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

По http://www.php.net/manual/en/reserved.variables.environment.php#97105

1

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

например.

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

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

Смежные вопросы