在PHP中,如何测试环境变量是否设置?我想要这样的行为:
// Assuming MYVAR isn't defined yet.
isset(MYVAR); // returns false
putenv("MYVAR=foobar");
isset(MYVAR); // returns true
getenv()
返回false
。以下代码将起作用:
// Assuming MYVAR isn't defined yet.
getenv("MYVAR") !== false; // returns false
putenv("MYVAR=foobar");
getenv("MYVAR") !== false; // returns true
请务必使用严格比较运算符 (
!==
),因为 getenv()
通常返回一个可以转换为布尔值的字符串。
环境变量(至少在 PHP 中)始终是字符串。无法将它们设置为布尔值
false
- 这就是为什么 putenv()
只接受一个字符串作为参数。因此,每当 getenv()
返回 false
时,环境变量就不会被设置。知道了这一点,您可以通过严格比较环境变量来确定是否设置了环境变量 false
。
if ( getenv('MYVAR') !== false ) {
echo 'Environment variable "MYVAR" is set to "' . getenv('MYVAR') . '"';
}
以下是一些测试(使用 Apache 指令
SetEnv
):
SetEnv TEST_FALSE false
SetEnv TEST_QUOTED_FALSE "false"
SetEnv TEST_0 0
SetEnv TEST_QUOTED_0 "0"
SetEnv TEST_EMPTY
SetEnv TEST_QUOTED_EMPTY ""
和 PHP
putenv()
:
putenv("PUTENV_FALSE=false");
putenv("PUTENV_0=0");
putenv("PUTENV_EMPTY=");
会导致什么结果:
UNSET_ENV: bool(false)
TEST_FALSE: string(5) "false"
TEST_QUOTED_FALSE: string(5) "false"
TEST_0: string(1) "0"
TEST_QUOTED_0: string(1) "0"
TEST_EMPTY: string(0) ""
TEST_QUOTED_EMPTY: string(0) ""
PUTENV_FALSE: string(5) "false"
PUTENV_0: string(1) "0"
PUTENV_EMPTY: string(0) ""
这里没有问,但与之相关:
如果您想检查环境变量是否设置为布尔值 true,您可以使用过滤器函数:
filter_var( getenv('MYVAR'), FILTER_VALIDATE_BOOLEAN) );
因为使用这个过滤器时,结果会是这样的:
UNSET_ENV: bool(false)
TEST_FALSE: bool(false)
TEST_QUOTED_FALSE: bool(false)
TEST_0: bool(false)
TEST_QUOTED_0: bool(false)
TEST_EMPTY: bool(false)
TEST_QUOTED_EMPTY: bool(false)
PUTENV_FALSE: bool(false)
PUTENV_0: bool(false)
PUTENV_EMPTY: bool(false)
“true”、“on”、“yes”和“1”(不区分大小写)等值将导致
bool(true)
。任何其他字符串都会返回 bool(false)
。
这就是你需要的
$var = getenv(MYVAR)
if(isset($var)) {
} else {
}