博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
$_ENV
阅读量:6093 次
发布时间:2019-06-20

本文共 3097 字,大约阅读时间需要 10 分钟。

hot3.png

$_ENV数组中的内容是在PHP解析器运行时,从PHP所在服务器中的环境变量, 导入到PHP的全局命名空间, 转变为PHP全局变量。

这些变量很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以不可能有一份确定的列表。查看 Shell 文档来获取定义的环境变量列表。其他环境变量包含了 CGI 变量,而不管 PHP 是以服务器模块还是 CGI 处理器的方式运行。

和$_SERVER一样,$_ENV也是自动全局变量,在所有的脚本中都有效,在函数或对象的方法中不需要使用global关键词访问它。

tips: 可通过在命令行中使用set, export, env 命令查看环境变量. 

env 和 set 命令的区别是,set 命令可以查看所有变量,而 env 命令只能查看环境变量。

setBASH=/bin/bashBASH_ALIASES=()BASH_ARGC=()BASH_ARGV=()BASH_CMDS=()BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.dBASH_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=ximCOLUMNS=204COMPIZ_BIN_PATH=/usr/bin/COMPIZ_CONFIG_PROFILE=ubuntuCOMP_WORDBREAKS=$' \t\n"\'><=;|&(:'DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-0qMYLsJiHIDEFAULTS_PATH=/usr/share/gconf/ubuntu.default.path...

 

exportdeclare -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"...
envXDG_VTNR=7LC_PAPER=zh_CN.UTF-8LC_ADDRESS=zh_CN.UTF-8XDG_SESSION_ID=c2XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/c80k2LC_MONETARY=zh_CN.UTF-8CLUTTER_IM_MODULE=ximSESSION=ubuntuGPG_AGENT_INFO=/home/c80k2/.gnupg/S.gpg-agent:0:1TERM=xterm-256colorVTE_VERSION=4205XDG_MENU_PREFIX=gnome-SHELL=/bin/bashQT_LINUX_ACCESSIBILITY_ALWAYS_ON=1WINDOWID=94371850LC_NUMERIC=zh_CN.UTF-8...

 

这里有一些环境变量及其对应的意义: 

除了被动获取之外, 我们还可以主动地往环境变量中添加设置, 让PHP脚本可以获取到.

1, 可以通过Bash的方式添加环境变量;

2, 可以通过PHP的配置添加环境变量;

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)'

转载于:https://my.oschina.net/u/3412738/blog/3053338

你可能感兴趣的文章
手机管理中的应用【6】——电源管理篇
查看>>
【Android工具】DES终结者加密时报——AES加密演算法
查看>>
效果收集-点击显示大图
查看>>
Android 开机过程PMS分析
查看>>
找不到com.apple.Boot.plist
查看>>
使用openssl创建自签名证书及部署到IIS教程
查看>>
入门视频采集与处理(学会分析YUV数据)
查看>>
java keytool详解
查看>>
记一次Redis被攻击的事件
查看>>
Debian 的 preinst, postinst, prerm, 和 postrm 脚本
查看>>
socket编程的select模型
查看>>
IDEA和Eclipse经常使用快捷键(Win Mac)
查看>>
ubutntu apt 源
查看>>
PHP 文件处理
查看>>
cesium之核心类Viewer简介篇
查看>>
ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
查看>>
libev与libuv的区别
查看>>
iOS 为什么使用xcode8上传app包到appStore无法构建版本
查看>>
Tomcat优化步骤【转】
查看>>
CRC 自动判断大端 小端
查看>>