2013-03-15 21 views
18

私は、この変数にアクセスするには、PHPのgetenv()機能を使用することができ、コマンドラインからPHPを使用する場合、私はubuntu community recommendation環境変数とPHP

あたりのように/ etc /環境に設定されたカスタム環境の一握りとUbuntuのサーバーを持っています。

また、コマンドラインからphpinfo()を実行すると、すべての変数がENVIRONMENTセクションに表示されます。もつとも

このデータが入手できないのphp5-FPMによって実行されているプロセス内の同じデータにアクセスしようとしています。私はphpinfo()のENVIRONMENTセクションで見ることができるすべては、次のとおりです。

/etc/php5/cli/php.ini 

およびFPM用途:私はいませんでした

/etc/php5/fpm/php.ini 

USER www-data 
HOME /var/www 

は、私は、これはINIコマンドラインを使用しています知っています両者の間にENV変数が両方に通っていない理由を説明する相違点を見つけることができました。

実行も場合:

sudo su www-data 

、その後、私は彼らが実際にWWW-データのユーザーにご利用いただけます期待していた環境変数をエコー。

環境変数をfpmで実行されるPHPプロセスに取り込むには、何が必要ですか?

+0

php-fpmプロセスが正しいユーザーで実行されていることを確認しましたか? – outrunthewolf

答えて

21

それはあなたが明示的にPHP-fpm.confに

をENVのVARSを設定していることが判明ここでは例です:

[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' 
+0

私は同じ問題があります。私は環境変数を正しく設定したユーザーの下でphp-fpmを実行しています。私はドル記号を使用する 'env [MY_ENV_1] = $ MYENV1'で 'php-fpm.conf'を設定しました。しかし、私は$ MYENV1を読むことができます。 phpinfo()は '値なし'を出力します。しかし、私はCLIで実行します。私は正しい値を読むことができます。私のケースでは – Magic

1

あなたは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

[www]セクションの下env[MY_ENV_VAR_1] = 'value1'を追加、変更します。
最後にphp-fpmを再起動してください。 fpmで環境負荷を取得します。 PHP-fpm.confで手動のphp-fpm.confで自動的

11

1.環境変数の設定

clear_env = no 


2.環境変数の設定

env[MY_ENV_VAR_1] = 'value1' 
env[MY_ENV_VAR_2] = 'value2' 


!どちらの方法は、PHP-fpm.confで説明されています。このプールで 設定を指定したenv VARSがある前に、FPMの労働者で

クリアな環境は、労働者に 環境をクリアしてFPMワーカープロセスに到達するの 変数任意の環境を防ぎます追加されました。 "no"に設定すると、getenv()、$ _ENV、$ _SERVERを介してすべての環境変数がPHPコードで利用可能になります。 デフォルト値:LD_LIBRARY_PATHのようなはい

clear_env = no 


パス環境変数。すべての$ VARIABLEは現在の環境から取得した です。デフォルト値:クリーンENV

env[HOSTNAME] = $HOSTNAME 
env[PATH] = /usr/local/bin:/usr/bin:/bin 
env[TMP] = /tmp 
env[TMPDIR] = /tmp 
env[TEMP] = /tmp 


私はこのgithub discussionで解決策を見つけました。

+0

でclear_envオプションはPHP 5.3.10では存在しませんでしたが、あなたが設定したようなvarはトリックでした! – holms