Установка $ _ENV (fka $ HTTP_ENV_VARS) с помощью nginx / php-fpm - PullRequest
8 голосов
/ 18 декабря 2011

Что такое эквивалент setenv в среде apache?С помощью apache я могу, например, установить env "SOMEENV" и получить доступ к нему в php через $ _ENV ['SOMEENV'] - но я не знаю, как это сделать с помощью nginx + php-fpm.

Сначала я думал, что мне просто нужно установить ENV [SOMENEV] = test в конфигурации моего пула php-fpm, но var_dump ($ _ ENV) по-прежнему ничего не возвращает.

Любые подсказки?

Ответы [ 2 ]

18 голосов
/ 18 декабря 2011

У 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;
}
6 голосов
/ 19 июня 2013

Имейте в виду, что доступность $_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, могут быть получены таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...