PHP: переменная среды, не читаемая getenv()

#php #apache #environment-variables #debian-based

#php #apache #переменные среды #на основе debian

Вопрос:

Я использую файл .htaccess для установки переменной среды

 SetEnv ENV "development"
 

Она может быть прочитана $_SERVER[‘ENV’], но не getenv(‘ENV’);
Для getenv() Я должен использовать

 putenv('ENV=development');
 

Не знаю, почему переменная, которая установлена в .htaccess, не читается getenv() .

Редактировать: поскольку я использую внешний скрипт, где запрашивается «ENV», я не понимал, что только имя «ENV» вызывает проблемы (зарезервировано?). Тест с другим именем переменной среды работает так, как ожидалось

 SetEnv REDIRECT_ENV "development"
 

Редактировать 2:
Среда — Apache 2.2, fastcgi, debian wheezy, php5.4.4
Я заметил это поведение на виртуальной машине VirtualBox и на корневом сервере онлайн с теми же компонентами

Комментарии:

1. @WereWolf: это здорово знать 😉 Вы тестировали это с помощью «ENV»?

2. Да, я сначала протестировал ее, а затем прокомментировал.

Ответ №1:

Вы можете использовать mod_rewrite для обнаружения env:

 RewriteEngine on

RewriteCond %{HTTP_HOST} ^stage.domain.com$
RewriteRule (.*) $1 [E=PYRO_ENV:stage]

RewriteCond %{HTTP_HOST} ^www.domain.com$
RewriteRule (.*) $1 [E=PYRO_ENV:production]
 

и

 SetEnvIf Host ^stage.example.com$ PYRO_ENV=stage
SetEnvIf Host ^(www.)?example.com$ PYRO_ENV=production
 

Комментарии:

1. Спасибо за ваши варианты, но все они не работают, если имя «ENV». Это делает просто другое имя переменной.

2. Так что, возможно, «ENV» является зарезервированным словом в этой ситуации. Не могли бы вы использовать другой термин? В конце концов, это просто еще одно имя переменной, верно?

3. Да, я ENV зарезервирован. Чек здесь php.net/manual/en/reserved.variables.environment.php