#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