-4

我已经为此苦苦挣扎了一两个星期了,我似乎无法解决它。这是我的脚本:

<?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.. 的末尾都没有得到任何结果?

任何帮助将不胜感激。

新杰基

4

5 回答 5

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;
}

您的数组计数与您使用的指针不匹配,这应该会有所帮助。您还在检查字符串而不是整数...

于 2013-02-22T21:51:40.503 回答
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)

什么是错是:您的服务器名称(如果有)((www.)?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;
} 
于 2013-02-22T21:53:42.377 回答
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;
于 2013-02-22T22:19:28.967 回答
0

首先回显您的 $Domain

echo $_SERVER['SERVER_NAME'];

然后 print_r 你的 $paryDomain

print_r($paryDomain);

如果这些是正确的,请回显您的 count()

echo count(explode(".",$_SERVER['SERVER_NAME']));
于 2013-02-22T22:09:11.427 回答
-1
$G_SYSTEMID = strstr($_SERVER['SERVER_NAME'], 'storeboard.com') ? 1 : 2;
于 2013-02-22T21:53:42.240 回答