Переменные среды и PHP

У меня есть сервер ubuntu с горсткой настраиваемой среды, установленной в / etc / environment в соответствии с рекомендацией сообщества ubuntu

Когда я использую php из командной строки, я могу использовать функцию getenv() php для доступа к этим переменным.

Кроме того, если я запускаю phpinfo() из командной строки, я вижу все мои переменные в разделе ОКРУЖАЮЩАЯ СРЕДА.

ОДНАКО:

При попытке доступа к тем же данным внутри процессов, запущенных php5-fpm, эти данные недоступны. Все, что я могу видеть в разделе phpinfo() :

 USER www-data HOME /var/www 

Я знаю, что в командной строке используется эта ini:

 /etc/php5/cli/php.ini 

И fpm использует:

 /etc/php5/fpm/php.ini 

Мне не удалось найти различий между этими двумя, которые объясняли бы, почему переменные ENV не проходят через оба.

Также, если запустить:

 sudo su www-data 

а затем эхо-переменные среды, которых я ожидаю, они действительно доступны пользователю www-data.

Что мне нужно сделать, чтобы получить переменные среды в php-процессы, выполняемые fpm?

Оказывается, что вы должны явно указывать VAR ENV в php-fpm.conf

Вот пример:

 [global] pid = /var/run/php5-fpm.pid error_log = /var/log/php5-fpm.log [www] user = www-data group = www-data listen = /var/run/php5-fpm.sock pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 chdir = / env[MY_ENV_VAR_1] = 'value1' env[MY_ENV_VAR_2] = 'value2' 

1. Автоматическая настройка переменных среды в php-fpm.conf

 clear_env = no 

2. Настройка переменных среды вручную в php-fpm.conf

 env[MY_ENV_VAR_1] = 'value1' env[MY_ENV_VAR_2] = 'value2' 

! Оба метода описаны в php-fpm.conf:

Очистка среды в рабочих FPM Предотвращает, чтобы произвольные переменные окружения попадали в рабочие процессы FPM, очищая среду в рабочей среде до того, как добавлены параметры, указанные в этой конфигурации пула. Установка «no» сделает все переменные среды доступными для кода PHP через getenv (), $ _ENV и $ _SERVER. Значение по умолчанию: да

 clear_env = no 

Передавайте переменные среды, такие как LD_LIBRARY_PATH. Все $ VARIABLE берутся из текущей среды. Значение по умолчанию: clean env

 env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp 

Я нашел решение в этом обсуждении github .

Проблема заключается в том, что вы запускаете php-fpm. Процесс не загружает среду.
Его можно загрузить в сценарии запуска.
Мой php-fpm устанавливается apt-get.
Так что измените

/etc/init.d/php5-fpm

и добавьте (остерегайтесь пространства между точкой и косой чертой)

, / И т.д. / профиль

и измените / etc / profile, чтобы добавить

, /home/user/env.sh

В env.sh. Вы можете export среду, что вам нужно.

Затем измените

PHP-fpm.conf

добавьте env[MY_ENV_VAR_1] = 'value1' разделе [www] .
Последний. перезапустите php-fpm. Вы получите нагрузку среды на fpm.