Доступ к переменной среды в приложении fastcgi
Я написал приложение fastcGI, используя C и C++
У меня есть бесплатная функция, которая возвращает строку, если конкретная переменная среды не была установлена. Функция выглядит так:
namespace
{
std::string getNameString()
{
char * datastr_ = getenv(MY_ENVAR.c_str());
if (datastr_)
return std::string(datastr_);
return DEFAULT_NAME;
}
};
Затем я выполняю следующие шаги (в порядке, указанном ниже)
- Я отредактировал мой / etc / environment и добавил соответствующую переменную окружения
- Я подтверждаю, что переменная была установлена, набрав printenv на консоли
- Я останавливаюсь и затем запускаю демон Apache
Когда я отлаживаю свое приложение, я обнаруживаю, что переменная окружения не была установлена. Я подозреваю, что среда, в которой работает приложение fastcgi, может отличаться от среды, в которой работают "обычные" приложения.
Кто-нибудь знает, как получить переменную среды в приложении fastcgi?
2 ответа
Я подозреваю, что процессы fastcgi порождаются в "очищенной" среде по умолчанию, учитывая ваши наблюдения. Apache, безусловно, предоставляет способ установки переменных среды для fastcgi. Это дает дополнительный бонус: он немного менее загадочный (кто ожидает, что веб-сервис будет вести себя по-разному при изменении /etc/environment?), Например, вы сохраняете "вещи веб-конфигурации" с "вещами веб-конфигурации".
Вы можете посмотреть здесь http://httpd.apache.org/docs/current/env.html и попытаться установить переменную env в процессе apache. Я принял последнюю версию Apache.