用于检测服务器环境的多开关语句的语法


Syntax for multiple switch statement to detect server environment

我需要在站点的配置文件中检测不同的服务器环境。到目前为止,我只能使用服务器的地址来检测它们。

switch ( $_SERVER['SERVER_ADDR']){
    case '127.0.0.1':
    // stuff
    break;
    case '111.222.333.444';
    // stuff
    break;
}

但是我现在需要针对SERVER_ADDRSERVER_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;
}

但是,更正常的方式是使用 ifelseif

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
}