web-dev-qa-db-ja.com

Nginxを使用してPHP-FPMで環境変数を取得する

ArchLinuxの_APP_ENV_ファイルで_/etc/environment_のようないくつかの環境変数を定義しました。

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の両方のサービスを再起動しましたが、まだ環境には何もありません。スクリプトは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
_

PHP-FPMコンテキストで環境変数にアクセスするにはどうすればよいですか?

どうもありがとう!

4
chindit

Printenvまたはphp test.phpと入力すると、環境変数が存在するため、それらが表示されます。

「HTTP経由でファイルにアクセスしようとすると... [your] envには何もありません」。正確には、環境変数が設定されていません。

なぜ違う行動を期待するのですか?/etc/environment、/ etc/profile、/ etc/bashrcなどのファイルは、シェルが使用されている場合にのみ読み込まれ、デーモンが実行されている場合は読み込まれません。

0
bgtvfr