Переменные среды и PHP
У меня есть сервер ubuntu с несколькими настраиваемыми средами, установленными в /etc/environment в соответствии с рекомендацией сообщества ubuntu
Когда я использую php из командной строки, я могу использовать функцию php getenv()
для доступа к этим переменным.
Кроме того, если я запустил 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?
Ответы
Ответ 1
Оказывается, что вы должны явно указывать 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'
Ответ 2
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, очистив окружающей среды в рабочих до env vars, указанных в этом пуле конфигурации. Установка в "no" сделает всю среду переменные, доступные для кода PHP через getenv(), $_ENV и $_SERVER. Значение по умолчанию: yes
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.
Ответ 3
Проблема заключается в том, что вы запускаете php-fpm. Процесс не загружает среду.
Его можно загрузить в старте script.
Мой 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.