在开发过程中,发现某环境变量无法获取,后来发现是使用了$_ENV,而另一个配置使用的是getenv。那么他们两者之间有什么区别呢。
用途 | |
$_ENV | 通过环境方式传递给当前脚本的变量的数组。 这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以不可能有一份确定的列表。请查看你的 Shell 文档来获取定义的环境变量列表。 其他环境变量包含了 CGI 变量,而不管 PHP 是以服务器模块还是 CGI 处理器的方式运行。 |
getenv | getenv — Gets the value of an environment variable 获取环境变量 |
$_ENV取值为空的问题:
你的php.ini的variables_order值为"GPCS",也就是说系统在定义PHP预定义变量时的顺序是 GET,POST,COOKIES,SERVER,没有定义Environment(E),你可以修改php.ini文件的 variables_order值为你想要的顺序,如:"EGPCS"。这时,$_ENV的值就可以取得了。
备注:不要修改Quick Reference下面的variables_order,因为在后面还有一个值。
以下一个表格看清楚:
运行方式/能否获取值 | $_ENV | getenv |
CLI运行 | true | true |
fpm运行-fpm没有配置env | false | false |
fpm运行-fpm有配置env | true | true |
参考:
http://www.php.net/manual/zh/reserved.variables.environment.php
http://www.php.net/manual/en/function.getenv.php