Comments for this page seem to indicate getenv() returns environment variables in all cases.
For getenv() to work, php.ini variables_order must contain 'E'.
$_ENV
$HTTP_ENV_VARS [非推奨]
(PHP 4 >= 4.1.0, PHP 5)
$_ENV -- $HTTP_ENV_VARS [非推奨] — 環境変数
説明
環境変数として現在のスクリプトに渡された変数の連想配列です。
これらの変数は PHP パーサが実行されている環境から PHP のグローバル名前空間に取り込まれます。 その多くは、PHP が実行されているシェルに由来するものであり、 システムが違えばシェルも違ってくるため、確定的なリストを 得ることは不可能です。定義されている環境変数のリストについては 使用しているシェルのドキュメントをご覧ください。
CGI 変数を含むその他の環境変数も、 PHP がサーバーモジュールとして実行されているか CGI プロセッサとして 実行されているかに関わらずここに含まれます。
$HTTP_ENV_VARS は同じ情報を持っていますが、 これはスーパーグローバルではありません ($HTTP_ENV_VARS と $_ENV は違う変数であり、PHP はそれぞれ別に扱います)。
変更履歴
| バージョン | 説明 |
|---|---|
| 4.1.0 | $_ENV が導入され、 $HTTP_ENV_VARS は非推奨となりました。 |
例
例1 $_ENV の例
<?php
echo 'My username is ' .$_ENV["USER"] . '!';
?>
"bjori" がこのスクリプトを実行したとします。
上の例の出力は、 たとえば以下のようになります。
My username is bjori!
注意
注意:
これは 'スーパーグローバル' あるいは自動グローバル変数と呼ばれるものです。 スクリプト全体を通してすべてのスコープで使用することができます。 関数やメソッドの内部で使用する場合にも global $variable; とする必要はありません。
david at davidfavor dot com
07-Feb-2012 07:07
anonymous
09-Sep-2010 04:36
If $_ENV is empty because variables_order does not include it, it will be filled with values fetched by getenv().
For example, when calling getenv("REMOTE_ADDR"), $_ENV['REMOTE_ADDR'] will be defined as well (if such an environment variable exists).
gabe-php at mudbugmedia dot com
26-May-2010 03:11
If your $_ENV array is mysteriously empty, but you still see the variables when calling getenv() or in your phpinfo(), check your http://us.php.net/manual/en/ini.core.php#ini.variables-order ini setting to ensure it includes "E" in the string.
php at isnoop dot net
01-Apr-2010 03:33
If you wish to define an environment variable in your Apache vhost file, use the directive SetEnv.
SetEnv varname "variable value"
It is important to note that this new variable will appear in $_SERVER, not $_ENV.
ewilde aht bsmdevelopment dawt com
19-Mar-2009 11:48
When running a PHP program under the command line, the $_SERVER["SERVER_NAME"] variable does not contain the hostname. However, the following works for me under Unix/Linux and Windows:
<?php
if (isset($_ENV["HOSTNAME"]))
$MachineName = $_ENV["HOSTNAME"];
else if (isset($_ENV["COMPUTERNAME"]))
$MachineName = $_ENV["COMPUTERNAME"];
else $MachineName = "";
?>
