2013-03-15 3 views
18

У меня есть сервер Ubuntu с горсткой пользовательской среды, установленной в/и т.д./окружающей среды в соответствии с ubuntu community recommendationПеременные среды и PHP

Когда я использую 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-данных.

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

+0

Вы проверили, что процесс php-fpm работает под правильным пользователем? – outrunthewolf

ответ

21

Оказывается, что вы должны явно установить 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' 
+0

У меня такая же проблема. Я запускаю php-fpm под пользователем, который правильно установил переменную среды. но я установил «php-fpm.conf» в «env [MY_ENV_1] = $ MYENV1», которые используют знак доллара. Но я могу прочитать $ MYENV1. phpinfo() распечатать «no value». Но когда я бегу в CLI. Я могу прочитать правильное значение. – Magic

1

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

/etc/init.d/php5-fpm

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

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

и изменить/и т.д./профиль, чтобы добавить

. /home/user/env.sh

На env.sh. Вы можете export окружающую среду, в которой вы нуждаетесь.

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

PHP-fpm.conf

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

11

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, очистив среды в рабочих, прежде чем окр VARS указано в этом пуле конфигурации являются добавлено. Установка в «no» сделает всю переменную доступной для PHP-кода через getenv(), $ _ENV и $ _SERVER. Значение по умолчанию: да

clear_env = no 


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

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


Я нашел решение в этом github discussion.

+0

в моем случае опция clear_env даже не существует в php 5.3.10, но настройки var, как вы показали, сделали трюк! – holms

Смежные вопросы