Apache/2.2.11 (Win32) PHP/5.3.0
を実行しています。htaccessファイルで次のことを行いました。
_SetEnv FOO bar
_
_$_ENV
_変数をPHPファイルで印刷すると、空の配列が得られます。
私は自分の変数を見つけましたが、_$_SERVER
_変数に表示されます。そして、なんらかの理由で、2回表示されます。どうしてこれなの?
_[REDIRECT_FOO] => bar
[FOO] => bar
_
getenv('FOO')
を使用して取得できるようですので、代わりにそれを使用する必要があります。しかし、私はまだこれが原因であることに少し興味があります。これはWindowsの問題ですか?または何が起こっていますか?
ここには2つの問題がありました。
1。 $_ENV
は、php.iniで許可されている場合にのみ入力されます。少なくともデフォルトでは WAMPサーバー ではデフォルトでは実行されないようですインストール。
; This directive determines which super global arrays are registered when PHP
; starts up. If the register_globals directive is enabled, it also determines
; what order variables are populated into the global space. 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
; is not recommended on productions servers. You can still get access to
; the environment variables through getenv() should you need to.
; Default Value: "EGPCS"
; Development Value: "GPCS"
; Production Value: "GPCS";
; http://php.net/variables-order
variables_order = "GPCS"
variables_order
をEGPCS
に戻すと、$_ENV
は空ではなくなります。
2。 .htaccess
でSetEnv
を使用すると、$_SERVER
ではなく、$_ENV
になります。名前がSetEnv
...の場合は少し混乱する.
# .htaccess
SetEnv ENV dev
SetEnv BASE /ssl/
# php
var_dump($_SERVER['ENV'], $_SERVER['BASE']);
// string 'dev' (length=3)
// string '/ssl/' (length=5)
3。 getenv
関数は常に動作し、PHP $ _ENVの設定の影響を受けません。)さらに、大文字と小文字を区別しないように思われます。役に立つかもしれません。
var_dump(getenv('os'), getenv('env'));
// string 'Windows_NT' (length=10)
// string 'dev' (length=3)
REDIRECT_*
変数は、RewriteRulesを使用している場合に表示されます。私のサーバーでは、それらも同様に表示されます。 FastCGIで実行することに関係があるかもしれません。また、suexecと組み合わせると、環境変数プール全体をクリーンアップする可能性が最も高くなります。特にPassEnv
に戻すには、追加の構成が必要になる場合があります。 getenv()があなたのために働く理由について、私は見当もつかない。ただし、すべての現象はサーバーとphpの構成に固有のものです。 serverfaultで尋ねてください、彼らは知っているべきです。