2011-12-18 1 views
8

Apache環境でsetenvと同等のものは何ですか? Apacheで私はenv "SOMEE​​NV"を設定し、$ _ENV ['SOMEE​​NV']経由でPHPにアクセスできますが、nginx + php-fpmを使ってどのように行うのか分かりません。

私は当初、私のphp-fpmプールの設定でENV [SOMENEV] = testを設定しなければならないと考えましたが、var_dump($ _ ENV)は何も返しません。

ヒント

答えて

17

nginxはphpインタープリタをそのプロセスに埋め込まないため、phpの環境に影響を与える方法がありません。それはfastcgi_paramディレクティブを介してPHPにパラメータを渡します。あなたはちょうどあなたがあなたのparamsの残りの部分を設定するものを追加して、$ _SERVER経由でアクセスすることができます。

location ~ \.php$ { 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $request_filename; 
    fastcgi_param SOMEENV test; 
    fastcgi_pass php; 
} 
+1

こんにちは、お返事ありがとうございます。さて、私は$ _SERVER ['SOMEE​​NV']に注入することができますが、$ _ENV ['SOMEE​​NV']のために何かを提供することができますか? – Josh

+1

$ _SERVER配列エントリはWebサーバによって作成されますが、$ _ENV変数はPHPインタプリタが動作している環境からインポートされ、多くはPHPが動作しているシェルによって提供されます。 Apacheの場合、PHPインタプリタはApacheプロセスに組み込まれていますが、Nginxではそうではありません。 IOW、Nginxで$ _ENV変数を設定することは可能ですが、$ _SERVERはそれが得られるほど良好です。 – Dayo

+0

NGINXに 'env'指令がありませんか? – CMCDragonkai

6

$_ENV変数の可用性がphp-で使用されるphp.iniのvariables_orderの設定に依存することに注意してくださいfpm。デフォルトはEGPCSで、Eは環境ですが、Ubuntu 12.04ではGPCSでした。

; This directive determines which super global arrays are registered when PHP 
; starts up. G,P,C,E & S are abbreviations for the following respective super 
; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty 
; paid for the registration of these arrays and because ENV is not as commonly 
; used as the others, ENV is not recommended on productions servers. 

それは常に利用可能であるgetenv()を使用することをお勧めします:php.iniの自体は$_ENVに関する警告を運びます。 FPMプールで設定した変数がこのように取得できることがわかりました。

+1

getenv()は$ _ENVと$ _SERVERの両方を検索するので、php-confのconfファイルに宣言された変数にアクセスできます:http://stackoverflow.com/questions/3780866/why-is-my-env-empty – LeandroCR

+0

getenv ()は同じように動作しません – deFreitas

0

php-fpm.d/www.confの変数をすべて設定しました。これらの変数へのアクセスは$ _SERVERを使用する唯一の方法であり、$ _ENVはアクセスできませんこれらの変数。 誰でも考えがありますか?

関連する問題