我究竟做错了什么

时间:2013-02-22 21:44:42

标签: php explode server-variables

我一直在努力争取一两个星期,我似乎无法解决它。这是我的剧本:

<?php
$Domain = $_SERVER['SERVER_NAME'];
$paryDomain = explode(".",$Domain);
$Array = count($paryDomain);
$RootDomain = "";
$G_SYSTEMID = "";

if ($Array == "1")
{
    $RootDomain = $paryDomain[0].'.'.$paryDomain[1];
}    
elseif ($Array == "2")
{
    $RootDomain = $paryDomain[1].'.'.$paryDomain[2];
}

if ($RootDomain == "storeboard.com")
{
    $G_SYSTEMID = 1;
}
elseif ($RootDomain == "dcwn.org")
{
    $G_SYSTEMID = 2;
}

echo $G_SYSTEMID;
echo "------------";

?>

为什么我在结尾处得不到结果1或2 ..?

非常感谢任何帮助。

Neojakey

5 个答案:

答案 0 :(得分:2)

if ($Array == 1)
{
    $RootDomain = $paryDomain[0]; 
}    
elseif ($Array == 2)
{
    $RootDomain = $paryDomain[0].'.'.$paryDomain[1];
}    
elseif ($Array == 3)
{
    $RootDomain = $paryDomain[1].'.'.$paryDomain[2];
} else {
    //to debug the possible cause 
    $G_SYSTEMID = 'Array length was equal to '.$Array;
    $RootDomain = false;
}

你的数组计数与你使用的指针不匹配应该有帮助。你也在检查字符串而不是整数......

答案 1 :(得分:1)

$Array = count($paryDomain);
if ($Array == "1")
{
    $RootDomain = $paryDomain[0].'.'.$paryDomain[1];
} 

如果$Array包含一个元素,则$paryDomain[1]不存在,或者数组必须只包含一个元素。

表示关于$ Array的整数:

$Array = 1;
var_dump(($Array == "1"));
var_dump(($Array == "2"));

bool(true) 

bool(false)

出了什么问题: 您的服务器名称(如果有)((。)?example.com):

if ($Array == "1")
{
    $RootDomain = $paryDomain[0].'.'.$paryDomain[1];
}    
elseif ($Array == "2")
{
    $RootDomain = $paryDomain[1].'.'.$paryDomain[2];
}

由于     $paryDomain = explode(".",$Domain);至少包含两个元素,然后,$ Array永远不等于一,只有在一种情况下,当SERVER_NAME是一个单词时!

解决方案:

if ($Array == "2")
{
    $RootDomain = $paryDomain[0].'.'.$paryDomain[1];
}    
elseif ($Array == "3")
{
    $RootDomain = $paryDomain[1].'.'.$paryDomain[2];
}else{

}

if ($RootDomain == "storeboard.com")
{
    $G_SYSTEMID = 1;
}
elseif ($RootDomain == "dcwn.org")
{
    $G_SYSTEMID = 2;
}else{
//in case when none of above cases true
    $G_SYSTEMID = 100;
} 

答案 2 :(得分:1)

只是想向您展示一种更简单的方法。它将支持具有无限子域的域,因为它始终抓取最后两个部分:

if (strpos($_SERVER['SERVER_NAME'], ".") !== false) {
    preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z]+)$/i', $_SERVER['SERVER_NAME'], $item);
    $RootDomain = $item['domain'];
} else {
    $RootDomain = $_SERVER['SERVER_NAME'];
}

switch ($RootDomain)
{
    case 'storeboard.com':
        $G_SYSTEMID = 1;
        break;
    case 'dcwn.org':
        $G_SYSTEMID = 2;
        break;
    default:
        $G_SYSTEMID = '';
        break;
}

echo $G_SYSTEMID;

答案 3 :(得分:0)

首先回复你的$ Domain

echo $_SERVER['SERVER_NAME'];

然后print_r你的$ paryDomain

print_r($paryDomain);

如果这些是正确的,请回显你的计数()

echo count(explode(".",$_SERVER['SERVER_NAME']));

答案 4 :(得分:-1)

$G_SYSTEMID = strstr($_SERVER['SERVER_NAME'], 'storeboard.com') ? 1 : 2;