2013-03-15 6 views
18

Mam Ubuntu Server z garstką niestandardowym środowisku ustawionym w/etc/środowiska, jak na ubuntu community recommendationZmienne środowiskowe i PHP

Kiedy używać PHP z wiersza poleceń można użyć getenv() Funkcja PHP, aby uzyskać dostęp do tego zmienne .

Ponadto, jeśli uruchomię phpinfo() z wiersza poleceń, widzę wszystkie moje zmienne w sekcji ŚRODOWISKO.

Jednakże:

Gdy próbuje uzyskać dostęp do tych samych danych wewnątrz procesów prowadzonych przez php5-fpm dane te nie są dostępne. Wszystko, co mogę zobaczyć w sekcji ŚRODOWISKA z phpinfo() jest:

USER www-data 
HOME /var/www 

wiem linia poleceń używa tego INI:

/etc/php5/cli/php.ini 

And FPM zastosowań:

/etc/php5/fpm/php.ini 

ja nie mam udało się znaleźć jakiekolwiek różnice między tymi dwoma, które wyjaśniałyby, dlaczego zmienne ENV nie występują w obu.

Także jeśli run:

sudo su www-data 

a następnie echo zmienne środowiskowe Oczekuję są rzeczywiście dostępne dla użytkownika www-data.

Co muszę zrobić, aby moje zmienne środowiskowe w procesach php były uruchamiane przez fpm?

+0

Czy sprawdziłeś, że proces php-fpm działa pod prawidłowym użytkownikiem? – outrunthewolf

Odpowiedz

21

Okazuje się, że trzeba jawnie ustawić ENV vars w php-fpm.conf

Oto przykład:

[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

Mam ten sam problem. Używam php-fpm pod użytkownikiem, który poprawnie ustawił zmienną środowiskową. ale ustawiłem "php-fpm.conf" na "env [MY_ENV_1] = $ MYENV1", który używa znaku dolara. Ale mogę przeczytać $ MYENV1. phpinfo() wypisuje "brak wartości". Ale kiedy biegnę w CLI. Mogę odczytać poprawną wartość. – Magic

1

Problem jest podczas uruchamiania php-fpm. Proces nie ładuje środowiska.
Możesz załadować go w skrypcie startowym.
Mój php-fpm jest instalowany przez apt-get.
więc modyfikować

/etc/init.d/php5-fpm

i dodać (uwaga przestrzeń pomiędzy kropką i kreską)

./etc/profile

i zmodyfikować/etc/profile, aby dodać

. /home/user/env.sh

W env.sh. Możesz export środowisko, co potrzebujesz.

następnie zmodyfikować

php fpm.conf

dodać env[MY_ENV_VAR_1] = 'value1' sekcji [www].
Last. uruchom ponownie php-fpm. Dostajesz obciążenie środowiska przez fpm.

11

1. Ustawienie zmienne środowiska automatycznie php-fpm.conf

clear_env = no 


2. Ustawienie zmienne środowiska ręcznie php-fpm.conf

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


! Obie metody są opisane w php-fpm.conf:

Wyczyść środowisko w pracowników FPM Zapobiega arbitralne środowisku zmienne z dotarciem procesów roboczych FPM czyszcząc środowisko pracowników przed env Vars określony w tej puli konfiguracyjne dodany. Ustawienie na "nie" spowoduje, że wszystkie zmienne środowiskowe będą dostępne dla kodu PHP za pośrednictwem getenv(), $ _ENV i $ _SERVER. Wartość domyślna: tak

clear_env = no 


zmienne środowiskowe Przełęcz jak LD_LIBRARY_PATH. Wszystkie $ VARIABLE są pobrane z bieżącego środowiska. Wartość domyślna: czysty env

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


znalazłem rozwiązanie w tej github discussion.

+0

w moim przypadku opcja clear_env nawet nie istnieje w php 5.3.10, ale ustawienia var tak jak pokazałeś zrobiły lewę! – holms