Каков эквивалент setenv в среде apache? С apache я могу, например, установить env «SOMEENV» и получить доступ к нему в php через $ _ENV ['SOMEENV'] – но я не знаю, как это сделать с nginx + php-fpm.
Первоначально я думал, что мне просто нужно установить ENV [SOMENEV] = test в конфиге моего пула php-fpm, но var_dump ($ _ ENV) все равно ничего не возвращает.
Любые намеки?
nginx не имеет возможности влиять на среду php, поскольку он не вставляет PHP-интерпретатор в свой процесс. Он передает параметры в php через директивы fastcgi_param . Вы можете просто добавить тот, где вы задали остальные параметры и получить доступ к нему через $ _SERVER:
location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param SOMEENV test; fastcgi_pass php; }
Имейте в виду, что доступность переменных $_ENV
зависит от параметра variables_order
в php.ini, используемого php-fpm. По умолчанию используется EGPCS
, где E
– среда, однако на Ubuntu 12.04 я обнаружил, что это GPCS
. Сам php.ini несет предупреждение о $_ENV
:
; This directive determines which super global arrays are registered when PHP ; starts up. G,P,C,E & S are abbreviations for the following respective super ; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty ; paid for the registration of these arrays and because ENV is not as commonly ; used as the others, ENV is not recommended on productions servers.
Он рекомендует использовать getenv()
который всегда доступен. Я обнаружил, что переменные, установленные в пуле FPM, могут быть восстановлены таким образом.
Я установил все env […] = переменные в php-fpm.d / http://www.conf. После пробовать выходные, я нашел единственный способ доступа к этим переменным использовать $ _SERVER, а $ _ENV не может получить доступ к этим переменным. Может ли кто-нибудь дать идею?