getenv() 与 PHP 中的 $_ENV
2022-08-30 07:34:13
和 有什么区别?getenv()
$_ENV
使用两者之间的任何权衡?
我注意到有时给了我我需要的东西,而没有(例如)。getenv()
$_ENV
HOME
和 有什么区别?getenv()
$_ENV
使用两者之间的任何权衡?
我注意到有时给了我我需要的东西,而没有(例如)。getenv()
$_ENV
HOME
根据关于getenv的php文档,它们是完全相同的,除了在不区分大小写的文件系统(如Windows)上运行时,它将以不区分大小写的方式查找变量。在 Linux 主机上,它仍然区分大小写。大多数时候,这可能并不重要,但文档中的一条评论解释说:getenv
例如,在Windows上,$_SERVER['Path']就像你看到的,第一个字母大写,而不是你期望的“PATH”。
因此,我可能会选择使用来改善跨平台行为,除非您确定要检索的环境变量的大小写。getenv
史蒂夫·克莱(Steve Clay)在这个答案中的评论强调了另一个区别:
附加优势:您无需在访问之前检查/。 不会发出通知。
getenv()
isset
empty
getenv()
我知道文档中的评论说这是不区分大小写的,但这不是我看到的行为: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
查看函数的源代码,这是因为 PHP 可以通过三种方式获取环境变量:getenv
sapi_getenv
GetEnvironmentVariableA
getenv
libc
据我所知,它唯一一次以不区分大小写的方式运行是在Windows上,因为这就是Windows环境变量API的行为方式。如果您使用的是Linux,BSD,Mac等,那么仍然区分大小写。getenv
正如马里奥所提到的,由于配置不同,并不总是填充的,所以如果你不控制服务器配置,最好避免。$_ENV
variables_order
$_ENV
因此,对于最便携的 PHP 代码:
getenv