ubuntuコミュニティの推奨事項に従って、少数のカスタム環境変数が/ etc/environmentに設定されたubuntuサーバーがあります
コマンドラインからphpを使用する場合、phpのgetenv()
関数を使用してこの変数にアクセスできます。
また、コマンドラインからphpinfo()
を実行すると、ENVIRONMENTセクションにすべての変数が表示されます。
ただし、php5-fpmによって実行されているプロセス内の同じデータにアクセスしようとすると、このデータは利用できません。 phpinfo()
のENVIRONMENTセクションで確認できるのは次のとおりです。
USER www-data
HOME /var/www
コマンドラインがこのiniを使用していることを知っています。
/etc/php5/cli/php.ini
そしてfpmは以下を使用します:
/etc/php5/fpm/php.ini
ENV変数が両方で発生しない理由を説明する2つの違いを見つけることができませんでした。
また実行した場合:
Sudo su www-data
そして、環境変数がエコーされ、www-dataユーザーが実際に使用できると期待しています。
環境変数をfpmで実行されるphpプロセスに取り込むには何が必要ですか?
Php-fpm.confでENV変数を明示的に設定する必要があることがわかります
次に例を示します。
[global]
pid = /var/run/php5-fpm.pid
error_log = /var/log/php5-fpm.log
[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
env[MY_ENV_VAR_1] = 'value1'
env[MY_ENV_VAR_2] = 'value2'
1。 php-fpm.confで環境変数を自動的に設定する
clear_env = no
2。 php-fpm.confで環境変数を手動で設定する
env[MY_ENV_VAR_1] = 'value1'
env[MY_ENV_VAR_2] = 'value2'
!どちらの方法もphp-fpm.conf:で説明されています
FPMワーカーの環境をクリアするこのプール構成で指定されたenv変数が追加される前にワーカーの環境をクリアすることにより、任意の環境変数がFPMワーカープロセスに到達しないようにします。 「no」に設定すると、すべての環境変数がPHP getenv()、$ _ ENV、および$ _SERVERを介したコード)で使用できるようになります。デフォルト値:yes
clear_env = no
LD_LIBRARY_PATHなどの環境変数を渡します。すべての$ VARIABLEは現在の環境から取得されます。デフォルト値:clean env
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
これで解決策が見つかりました githubディスカッション 。
問題は、php-fpmを実行するときです。プロセスは環境をロードしません。
起動スクリプトにロードできます。
私のphp-fpmはapt-getによってインストールされます。
したがって、
/etc/init.d/php5-fpm
追加します(ドットとスラッシュの間のスペースに注意してください)
。/etc/profile
/ etc/profileを変更して追加します
。 /home/user/env.sh
Env.sh内。必要に応じて環境をexport
できます。
次に変更します
php-fpm.conf
追加 env[MY_ENV_VAR_1] = 'value1'
下 [www]
セクション。
最終。 php-fpmを再起動します。 fpmによって環境負荷を取得します。
上記の回答に加えて、php-fpm7
DockerコンテナでAlpine:3.8
およびnginx
を実行していました。私が直面した問題は、USER myuser
の環境変数がUSER root
にコピーされないことでした。
Dockerのエントリポイントは
Sudo nginx # Runs nginx as daemon
Sudo php-fpm7 -F -O # Runs php-fpm7 in foreground
これに対する解決策は
Sudo -E nginx
Sudo -E php-fpm7 -F -O
Sudoの-E
オプションは、現在のユーザーのすべての環境変数をルートにコピーします
もちろん、php-fpm.d/www.conf
ファイルにはclear_env=no
が必要です
参考までに、supervisord
のようなデーモンサービスを使用している場合、環境をコピーするための独自の設定があります。たとえば、supervisord
にはcopy_env=True
という設定があります