Повторно инициализировать общесистемную переменную среды в Linux

Я просто хочу, чтобы мой apache зарегистрировал часть моей предопределенной среды, чтобы я мог получить ее с помощью функции getenv в php. Как я могу это сделать? Я попытался добавить /etc/profile.d/foo.sh с экспортом FOO = / bar / baz, используя root и перезапустив apache.

Какая раздача? Это влияет на лучший способ сделать это.

freespace 22.09.2008 14:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
1
3 499
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Переменные среды наследуются процессами в Unix. Файлы в /etc/profile.d выполняются (в текущей оболочке, а не в подоболочке) только при входе в систему. Простое изменение значения там и последующий перезапуск процесса не приведет к обновлению среды.

Возможные исправления:

  • выйдите из системы / войдите в систему, затем запустите apache
  • источник файла: # . /etc/profile.d/foo.sh, затем перезапустите apache
  • источник файла в скрипте инициализации apache

Вам также необходимо убедиться, что источник /etc/profile.d/ запускается при запуске Apache init, а не вами.

Лучшее исправление также может зависеть от используемого вами дистрибутива, поскольку они используют разные схемы для настройки.

Хороший. Имейте в виду, что сценарий инициализации apache может измениться при обновлении.

Torsten Marek 22.09.2008 15:07

Вы можете использовать SetEnv в своих файлах конфигурации (/etc/httpd/conf.d/*.conf, .htaccess ...). Кроме того, вы должны иметь возможность определять их в / etc / sysconfig / httpd (в дистрибутивах на основе RPM) и экспорт их (примечание: не тестировалось).

Примечание: меня не удивит, если некоторые дистрибутивы изо всех сил стараются скрыть как можно больше, что касается конфигурации системы, от общедоступной службы, такой как Apache. А если они этого не сделают, они могут начать делать это в будущей версии. Поэтому я советую вам сделать это явно. Если вам нужно поделиться такой настройкой между Apache и вашими оболочками, вы можете попробовать получить /etc/profile.d/yourprofile.sh из / и т.д. / sysconfig / httpd

Файлы конфигурации Apache позволяют вам устанавливать переменные среды для каждого сайта отдельно.

Таким образом, если ваш веб-сервер обслуживает страницы с двух логических сайтов, вы можете установить одну и ту же переменную среды по-разному для каждого сайта и, таким образом, заставить ваш PHP реагировать по-разному.

Подробнее см. Apache mod_env:

Если вам нужны env vars только для Apache, у меня сработало редактирование /etc/apache2/envvars и перезапуск Apache. Я добавил эти настройки:

export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'

Другие вопросы по теме