注册 登录

清河洛

PHP中的超全局变量

qingheluo2017-10-14清河洛399
超全局变量是在全部作用域中始终可用的内置变量$GLOBALS :一个包含了全局作用域中可用的全部变量的组合数组。变量的名字就是数组的键。$_SERVER :是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组这个数组中的项目由 Web 服务器创建 不能保证每个服务器都提供全部项目、 服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目 $_GET :通过 URL 参数传递给当前脚本的变量的数组。$_POST :通过 HTTP POST 方法传递给当前脚本的变量的数组。$_FILES :通过 HTTP POST 方式...

超全局变量是在全部作用域中始终可用的内置变量

$GLOBALS :一个包含了全局作用域中可用的全部变量的组合数组。变量的名字就是数组的键。

$_SERVER :是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组

这个数组中的项目由 Web 服务器创建
不能保证每个服务器都提供全部项目、
服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目

$_GET :通过 URL 参数传递给当前脚本的变量的数组。

$_POST :通过 HTTP POST 方法传递给当前脚本的变量的数组。

$_FILES :通过 HTTP POST 方式上传到当前脚本的项目的数组。

$_COOKIE :通过 HTTP Cookies 方式传递给当前脚本的变量的数组。

$_SESSION :当前脚本可用 SESSION 变量的数组。

$_REQUEST :默认情况下包含了$_GET,$_POST的数组,通过php.ini中的request_order设置

$_ENV:是一个包含服务器端所有环境变量的数组

这些变量被从PHP解析器的运行环境导入到PHP的全局命名空间
很多是由支持PHP运行的Shell提供的,并且不同的系统很可能运行着不同种类的Shell,所以不可能有一份确定的列表
可以使用phpinfo()查看Environment选项中的值来获取环境变量列表

有时候,$_ENV会为空,其原因通常是php的配置文件php.ini的配置项为:variables_order="GPCS"
要想让$_ENV的值不为空,那么variables_order的值应该加上一个大写字母“E”,即:variables_order = "EGPCS"
上述配置表示了PHP接受的外部变量来源及顺序,EGPCS是Environment、Get、Post、Cookies、Server的缩写
如果variables_order 的配置中缺少E ,则PHP无法接受环境变量,那么$_ENV也就为空了。

由于开启$_ENV,即variables_order = "EGPCS"会导致一些性能损失,按php官方的说法是,在生产环境中,不推荐使用
更推荐使用getenv (string $varname)函数来获取Environment中的值

getenv ( string $varname ):返回环境变量 varname 的值, 如果环境变量 varname 不存在则返回 FALSE。

putenv ( string $setting )

添加setting到服务器环境变量
环境变量仅存活于当前请求期间
成功时返回 TRUE, 失败时返回 FALSE。

设置特定的环境变量也有可能是一个潜在的安全漏洞
safe_mode_allowed_env_vars 包含了一个以逗号分隔的前缀列表
在安全模式下,用户可以仅能修改用该指令设定的前缀名称的指令
默认情况下,用户仅能够修改以 PHP_ 开头的环境变量(例如 PHP_FOO=BAR)
注意:如果此指令是空的,PHP允许用户设定任意环境变量!

safe_mode_protected_env_vars 指令包含了逗号分隔的环境变量列表,使用户最终无法通过 putenv() 修改

即使 safe_mode_allowed_env_vars 设置允许修改,这些变量也会被保护。



网址导航