$_ENV数组中的内容是在PHP解析器运行时,从PHP所在服务器中的环境变量, 导入到PHP的全局命名空间, 转变为PHP全局变量。php
这些变量不少是由支持 PHP 运行的 Shell 提供的,而且不一样的系统极可能运行着不一样种类的 Shell,因此不可能有一份肯定的列表。查看 Shell 文档来获取定义的环境变量列表。其余环境变量包含了 CGI 变量,而无论 PHP 是以服务器模块仍是 CGI 处理器的方式运行。html
和$_SERVER同样,$_ENV也是自动全局变量,在全部的脚本中都有效,在函数或对象的方法中不须要使用global关键词访问它。linux
tips: 可经过在命令行中使用set, export, env 命令查看环境变量. web
env 和 set 命令的区别是,set 命令能够查看全部变量,而 env 命令只能查看环境变量。ubuntu
set BASH=/bin/bash BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d BASH_LINENO=() BASH_REMATCH=() BASH_SOURCE=() BASH_VERSINFO=([0]="4" [1]="3" [2]="48" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu") BASH_VERSION='4.3.48(1)-release' CLUTTER_IM_MODULE=xim COLUMNS=204 COMPIZ_BIN_PATH=/usr/bin/ COMPIZ_CONFIG_PROFILE=ubuntu COMP_WORDBREAKS=$' \t\n"\'><=;|&(:' DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-0qMYLsJiHI DEFAULTS_PATH=/usr/share/gconf/ubuntu.default.path . . .
export declare -x CLUTTER_IM_MODULE="xim" declare -x COMPIZ_BIN_PATH="/usr/bin/" declare -x COMPIZ_CONFIG_PROFILE="ubuntu" declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-0qMYLsJiHI" declare -x DEFAULTS_PATH="/usr/share/gconf/ubuntu.default.path" declare -x DESKTOP_SESSION="ubuntu" declare -x DISPLAY=":0" declare -x GDMSESSION="ubuntu" declare -x GDM_LANG="zh_CN" declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated" declare -x GNOME_KEYRING_CONTROL="" declare -x GNOME_KEYRING_PID="" declare -x GPG_AGENT_INFO="/home/c80k2/.gnupg/S.gpg-agent:0:1" declare -x GTK2_MODULES="overlay-scrollbar" . . .
env XDG_VTNR=7 LC_PAPER=zh_CN.UTF-8 LC_ADDRESS=zh_CN.UTF-8 XDG_SESSION_ID=c2 XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/c80k2 LC_MONETARY=zh_CN.UTF-8 CLUTTER_IM_MODULE=xim SESSION=ubuntu GPG_AGENT_INFO=/home/c80k2/.gnupg/S.gpg-agent:0:1 TERM=xterm-256color VTE_VERSION=4205 XDG_MENU_PREFIX=gnome- SHELL=/bin/bash QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1 WINDOWID=94371850 LC_NUMERIC=zh_CN.UTF-8 . . .
这里有一些环境变量及其对应的意义: http://c.biancheng.net/view/2938.html数组
除了被动获取以外, 咱们还能够主动地往环境变量中添加设置, 让PHP脚本能够获取到.bash
1, 能够经过Bash的方式添加环境变量;服务器
http://c.biancheng.net/view/960.html函数
2, 能够经过PHP的配置添加环境变量;php-fpm
2.1,设置系统环境变量:
#vi /etc/profile
如增长一个环境变量:
export MY_REDIS_HOST="localhost"
2.2,修改php-fpm.conf,设置PHP环境变量:
#vi /etc/php5.6/fpm/php-fpm.conf
增长:
env[MY_REDIS_HOST]=$MY_REDIS_HOST
2.3,修改php-fpm启动脚本。
由于每次要使系统变量生效,都必须source /etc/profile,而php-fpm启动时,也须要做此操做。所以,须要修改php-fpm启动脚本。
如使用apt-get安装的,则:
#vi /etc/init.d/php-fpm
在PATH等环境变量定义以后,加入一行:
. /etc/profile
注意,点号与路径之间有空格。实际上.与source是同样的,可是这里用source会报错
还要修改/etc/profile的权限,由于php-fpm启动用户是www-data , 而/etc/profile的权限用户为root,这里为了简章,将/etc/profile的权限设为“777”,即:#chmod 777 /etc/profile
2.4,修改php.ini配置。
由于php.ini默认不载入$_ENV变量定义,若是此时查看phpinfo(),会发现咱们设置的环境变量为"no value"。
#vi /etc/php5.6/fpm/php.ini
修改:variables_order为:
variables_order="EGPCS"
2.5, 重启php-fpm
#service php5.6-fpm restart
2.6,测试设置结果。
查看phpinfo(),在"Enviroment variables" 一节与“PHP variables”一节内可能看到咱们刚才设置的变量名及变量值。
[补充]:
1,php web能够正常获得$_ENV的变量, php-cli模式取不到$_ENV。即:
php -r 'print_r($_ENV);'
获得结果:array()
这是由于php-cli用的是另一个php.ini,其variables_order没有打开ENV变量。其使用的是:/etc/php5.6/cli/php.ini,按[4]说明打开便可。
碰到这个问题,可使用指定加载配置文件(.ini)来测试是不是php.ini引发的。即:
php -c '/etc/php5.6/fpm/php.ini' -r 'print_r($_ENV)'