Подтвердить что ты не робот

Переменные среды и 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?

4b9b3361

Ответ 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.