略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: $_ENV

2024-04-25

$_ENV

$_ENV环境变量

说明

通过环境方式传递给当前脚本的变量的数组

这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以不可能有一份确定的列表。请查看你的 Shell 文档来获取定义的环境变量列表。

其他环境变量包含了 CGI 变量,而不管 PHP 是以服务器模块还是 CGI 处理器的方式运行。

范例

示例 #1 $_ENV 范例

<?php
echo 'My username is ' .$_ENV["USER"] . '!';
?>

假设 "bjori" 运行此段脚本

以上例程的输出类似于:

My username is bjori!

注释

注意:

“Superglobal”也称为自动化的全局变量。这就表示其在脚本的所有作用域中都是可用的。不需要在函数或方法中用 global $variable; 来访问它。

参见

add a noteadd a note

User Contributed Notes 10 notes

up
133
gabe-php at mudbugmedia dot com
12 years ago
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.
up
13
david at davidfavor dot com
10 years ago
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'.
up
8
aasasdasdf at yandex dot ru
8 years ago
Please note that writing to $_ENV does not actually set an environment variable, i.e. the variable will not propagate to any child processes you launch (except forked script processes, in which case it's just a variable in the script's memory). To set real environment variables, you must use putenv().

Basically, setting a variable in $_ENV does not have any meaning besides setting or overriding a script-wide global variable. Thus, one should never modify $_ENV except for testing purposes (and then be careful to use putenv() too, if appropriate).

PHP  will not trigger any kind of error or notice when writing to $_ENV.
up
5
anonymous
11 years ago
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).
up
5
php at isnoop dot net
12 years ago
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.
up
0
Andrew @ Island Architectural Woodwork
6 months ago
When placing the environment variables in the httpd.conf file of my Apache server, I can access those variables by using getenv(). When I use $_ENV[] or $_SERVER[], they are not accessible. Inside my php.ini file, the variables-order property is configured with 'E' included; noted by other users.

When placing the environment variables in the httpd-vhosts.conf file of my Apache server, I can access those variables by using getenv(), as well as $_SERVER[]. Using $_ENV[] still does not work for me. Calling getenv() before $_ENV[] didn't seem to work either.

$_SERVER[] will remain as my solution.
up
-3
Tit Petric
5 years ago
If you're using php-fpm you might want to set `clean_env = no`. This setting cleans the environment variables by default, meaning that PHP would be started with a clean environment.
up
-7
kobenews at cox dot net
4 years ago
If running php-fpm with the default production variables_order = GPCS, $_ENV will always be an empty array. Instead of reading the superglobal $_ENV use the built-in function getenv() or read from $_SERVER['ENV-KEY-HERE'].
up
-16
Guy
4 years ago
@Tit Petric - I believe you meant: clear_env=no

not clean_env

Set the above in your PHP-FPM config to prevent clearing ENV vars
up
-64
ewilde aht bsmdevelopment dawt com
13 years ago
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 = "";
?>

官方地址:https://www.php.net/manual/en/reserved.variables.environment.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3