Получение переменных среды в PHP-FPM с помощью Nginx
Я определил некоторые переменные среды, такие как APP_ENV
в моем /etc/environment
файл, на моем ArchLinux.
Если я наберу printenv
, Я вижу их.
Я создал этот простой тестовый файл под названием... test.php
<?php
var_dump(getenv('APP_ENV'));
var_dump(getenv());
Если я бегу php test.php
, все в порядке, я вижу свои переменные ENV.
Но когда я пытаюсь получить доступ к файлу через HTTP... в моем env ничего нет!
Конечно, я изменил конфиг /etc/php/php-fpm.d/www.conf
установить clear_env = no
Это затронутые строки:
; Clear environment in FPM workers
; Prevents arbitrary environment variables from reaching FPM worker processes
; by clearing the environment in workers before env vars specified in this
; pool configuration are added.
; Setting to "no" will make all environment variables available to PHP code
; via getenv(), $_ENV and $_SERVER.
; Default Value: yes
clear_env = no
И я перезапустил оба php-fpm
а также nginx
услуги, но... все еще ничего в моем env. Скрипт возврата bool(false)
,
Итак... Я что-то упустил?
Это моя версия php-fpm:
php-fpm --version
PHP 7.2.6 (fpm-fcgi) (built: May 26 2018 07:45:18)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
И моя версия Nginx
nginx -v
nginx version: nginx/1.14.0
Что я должен сделать, чтобы получить доступ к моим переменным env в контексте PHP-FPM?
Большое спасибо!
2 ответа
Вы можете установить переменную окружения в /etc/php/php-fpm.d/www.conf следующим образом:env[APP_ENV] = development
Тогда вы сможете получить его с getenv('APP_ENV')
как ты и ожидал.
Когда вы набираете printenv или php test.php, вы видите переменные окружения, потому что они существуют.
Когда вы "пытаетесь получить доступ к файлу через HTTP… в [вашем] env ничего нет". Точно ваши переменные окружения не установлены.
Почему вы ожидаете другого поведения? Файлы, такие как / etc / environment, / etc / profile и / etc / bashrc, получают только при использовании оболочки, а не при запуске демона.