У меня есть сервер 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.