$_ENV

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

本站公眾號
   歡迎關注本站公眾號,獲取更多信息