PHP中使用$_ENV获取环境变量的问题

今天在网上偶然看到一个问题:为什么使用$_ENV获取不到设置的环境变量?,回答这个问题之前先看看PHP的一个配置项variables_order.
php.ini中原文如下:

This directive describes the order in which PHP registers GET, POST, Cookie,
 Environment and Built-in variables (G, P, C, E & S respectively, often
 referred to as EGPCS or GPC).  Registration is done from left to right, newer
 values override older values.

意思是该配置项描述PHP的解析变量顺序,包括$_GET,$_POST,$_COOKIE,$_ENV 和 $_SERVER ,解析顺序从左到右,后解析新值覆盖旧值。默认设定为EGPCS(Environment,GET,POST,Cookie,Server)。
如果将其设为“GP”,会导致 PHP 完全忽略环境变量,cookies 和 server 变量,并用 POST 方法的变量覆盖 GET 方法的同名变量。
回头再看开始的问题,$_ENV之所以取不到设置的环境变量,是因为 variables_order 配置项中缺少接收环境变量的配置 E. 解决问题的方法就是在 variables_order 里面加上 E.
由于开启$_ENV,即在 variables_order 选项里加上 E 会导致一些性能损失,php官方不推荐在生产环境中使用。推荐使用 getenv (string $varname) 函数来获取环境变量.

36nu 分享编程知识及经验

已有账号?立即登录
微信公众号
关注36nu微信公众账号
获取最新编程知识及经验