我需要在站点的配置文件中检测不同的服务器环境。到目前为止,我只能使用服务器的地址来检测它们。
switch ( $_SERVER['SERVER_ADDR']){
case '127.0.0.1':
// stuff
break;
case '111.222.333.444';
// stuff
break;
}
但是我现在需要针对SERVER_ADDR
和SERVER_NAME
测试我的环境。我不是php'er,所以我试了一下
switch ( $_SERVER['SERVER_ADDR'] && $_SERVER['SERVER_NAME'] ){
case ('127.0.0.1','local'):
// stuff
break;
case ('111.222.333.444','gimmesomefunk.com');
// stuff
break;
}
但这显然是错误的。有什么线索吗?
如果你想
继续使用switch
,你必须将两者组合成一个变量,如下所示:
switch (array($_SERVER['SERVER_ADDR'], $_SERVER['SERVER_NAME'])){
case array('127.0.0.1', 'local'):
// stuff
break;
case array('111.222.333.444', 'gimmesomefunk.com'):
// stuff
break;
}
但是,更正常的方式是使用 if
,elseif
:
if ( $_SERVER['SERVER_ADDR'] == '127.0.0.1' && $_SERVER['SERVER_NAME'] == 'local' ) {
// stuff
} elseif ( $_SERVER['SERVER_ADDR'] == '111.222.333.444' && $_SERVER['SERVER_NAME'] == 'gimmesomefunk.com' ) {
// stuff
}
我不确定这是最好的方法,但你可以像这样连接值:
switch ( $_SERVER['SERVER_ADDR'].$_SERVER['SERVER_NAME'] ){
case ('127.0.0.1local');
// stuff
break;
case ('111.222.333.444gimmesomefunk.com');
// stuff
break;
}
你不能
这样做,因为你实际输入switch
语句的是一个布尔值(true
),因为你说的是"这个字符串是真实的,这个字符串是真实的":
var_dump($_SERVER['SERVER_ADDR'] && $_SERVER['SERVER_NAME']) // bool(true)
您可以简单地使用 if
语句来执行以下操作(您不必使用 $address
和 $name
,但在我看来它变得更具可读性):
$address = $_SERVER['SERVER_ADDR'];
$name = $_SERVER['SERVER_NAME'];
if ($address === '127.0.0.1' && $name === 'local') {
// Stuff
} else if ($address === '111.222.333.444' && $name === 'gimmesomefunc.com') {
// Other stuff
}