Получение переменных среды в 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 , но… в моем окружении все еще ничего. Script return 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?

Большое спасибо!

4
задан 9 June 2018 в 21:43
2 ответа

Вы можете установить переменную окружения в /etc/php/php-fpm.d/www.conf следующим образом: env [APP_ENV] = development Тогда вы сможете получить его с помощью getenv ('APP_ENV') , как вы и ожидали.

4
ответ дан 3 December 2019 в 03:27

Когда вы вводите printenv или php test.php, вы видите переменные окружения, потому что они существуют.

Когда вы «пытаетесь получить доступ к файлу через HTTP… в [вашем] env ничего нет». Точно ваши переменные окружения не установлены.

Почему вы ожидаете другого поведения? Такие файлы, как / etc / environment, / etc / profile и / etc / bashrc, получают только при использовании оболочки, а не при запуске демона.

0
ответ дан 3 December 2019 в 03:27

Теги

Похожие вопросы