多个switch语句的语法,用于检测服务器环境

时间:2014-11-17 18:54:49

标签: php

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

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

但我现在需要针对SERVER_ADDRSERVER_NAME测试我的环境。我没有php,所以我已经捅了

switch ( $_SERVER['SERVER_ADDR'] && $_SERVER['SERVER_NAME'] ){
    case ('127.0.0.1','local'):
    // stuff
    break;
    case ('111.222.333.444','gimmesomefunk.com');
    // stuff
    break;
}

但它显然是错的。有线索吗?

3 个答案:

答案 0 :(得分:1)

如果您想继续使用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
}

答案 1 :(得分:0)

我不确定这是最好的方法,但你可以连接这样的值:

switch ( $_SERVER['SERVER_ADDR'].$_SERVER['SERVER_NAME'] ){
    case ('127.0.0.1local');
    // stuff
    break;
    case ('111.222.333.444gimmesomefunk.com');
    // stuff
    break;
}

答案 2 :(得分:-1)

你不能这样做,因为你实际输入的switch语句是一个布尔值(true),因为你说的是​​“这是一个字符串真的,这个字符串truthy “:

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
}