tau*_*tau 75 php environment-variables
getenv()
和之间有什么区别$_ENV
?
使用它们之间的任何权衡?
我注意到有时getenv()
会给我我需要的东西,而$_ENV
不是(如HOME
).
Bat*_*ins 55
根据关于getenv的php文档,它们是完全相同的,除了getenv
它将以不区分大小写的方式查找变量.大多数时候它可能无关紧要,但文档中的一条评论解释说:
例如在Windows $ _SERVER ['Path']就像你看到的那样,第一个字母大写,而不是你想象中的'PATH'.
因此,我可能会选择使用,getenv
除非您确定要检索的变量标题的大小写.
Con*_*roe 42
我知道文档中的评论说这getenv
是不区分大小写的,但这不是我所看到的行为:
> env FOO=bar php -r 'print getenv("FOO") . "\n";'
bar
> env FOO=bar php -r 'print getenv("foo") . "\n";'
> env foo=bar php -r 'print getenv("foo") . "\n";'
bar
> env foo=bar php -r 'print getenv("FOO") . "\n";'
> php --version
PHP 5.4.24 (cli) (built: Jan 24 2014 03:51:25)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
Run Code Online (Sandbox Code Playgroud)
纵观源代码的getenv
功能,这是因为有PHP可以获取环境变量三种方式:
sapi_getenv
(例如,如果它从Apache获取环境变量)GetEnvironmentVariableA
.getenv
提供的功能提供libc
.据我所知,唯一一次它会以不区分大小写的方式运行在Windows上,因为这就是Windows环境变量API的行为方式.如果您使用的是Linux,BSD,Mac等,那么getenv
仍然区分大小写.
如马里奥所述,$_ENV
由于配置不同,并不总是填充,variables_order
因此$_ENV
如果您不控制服务器配置,最好避免使用.
因此,对于最便携的PHP代码:
getenv
.mar*_*rio 34
$_ENV
如果variables_order
没有E
列出,另外通常是空的.在许多设置中,可能只会$_SERVER
填充,并且$_ENV
严格用于CLI.
另一方面getenv()
直接访问环境.
(关于案例模糊,可以更简单地使用array_change_key_case()
.)
我想补充一点, getenv() 是一个更好的选择,因为作为一个函数,它可以重载以用于测试目的。而覆盖 $_SERVER 或 $_ENV 变量可能会干扰测试框架和其他库,并最终需要更多的工作才能安全地执行。
我认为现有的答案很好地概述了使用中的任何差异,但也可能值得记住的是,用于加载环境变量的流行 PHP 库的维护者建议避免使用getenv
https://github.com/vlucas/phpdotenv
强烈建议不要使用 getenv() 和 putenv(),因为这些函数不是线程安全的
归档时间: |
|
查看次数: |
53220 次 |
最近记录: |