2013-02-22 159 views
-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没有结果..?

任何帮助将不胜感激。

Neojakey

+1

我要说明显的原因是$ RootDomain既不是字符串的你比较它太...也许你可以呼应它并看看实际价值是什么...? – MrHug 2013-02-22 21:47:05

+0

开始在整个逻辑中的各个点回显变量,并查看它们开始时的位置,而不是您所期望的。 – ceejayoz 2013-02-22 21:47:06

+15

“我在做什么错”< - 不使用适当的标题。 – 2013-02-22 21:47:08

回答

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

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

+0

我做了这个改变仍然没有从脚本输出..任何其他建议..? – neojakey 2013-02-22 21:54:04

+0

@neojakey请参阅编辑:)您必须使用count函数来计算数组长度,并且您的数组指针数字不正确:)数组从'0'开始 – Sir 2013-02-22 21:54:30

+0

@neojakey第三编辑如果考虑到所有选项,添加了额外的 – Sir 2013-02-22 22:00:03

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

如果$Array包含一个元素,那么$paryDomain[1]是不存在的,或者阵列只能包含一个元素。

对于其,说约$数组,它是整数

$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; 
} 
+0

谁投了票如果可以解释!!! – 2013-02-22 21:59:07

+0

你现在有+1! – Sir 2013-02-22 22:08:27

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

嗯,仍然像我的方式更好:) – slattman 2013-02-22 22:21:17

+0

是的,如果你不关心检查其他域'dcwn.org' ... – 2013-02-22 22:23:25

+0

我只看到两个选项,即使有更多,它不会对每一行添加一行并使用0添加默认值是一件大事。它比使用开关或其他方式的写入更少。 – slattman 2013-02-22 22:53:17

0

第一回波的$域

echo $_SERVER['SERVER_NAME']; 

然后print_r的您$ paryDomain

print_r($paryDomain); 

如果这些都是正确的,回声您的计数( )

echo count(explode(".",$_SERVER['SERVER_NAME'])); 
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; 
+1

@Baba应该把'\。[az \。] {2,6})'改为'\ 。[AZ] +)'?我认为这段时间是一个错字吗?此外,这将限制TLD为2-6个字符,但ICANN已经开放了[购买](http://www.techspot.com/news/47031-icann-selling-custom-top-level-domains-for- 185000.html)的TLD,所以我们将来可以拥有像mysite.somefancytld这样的域名。 – 2013-02-26 13:11:00

+0

'ICANN以185,000美元的价格销售自定义顶级域名哇..感谢您的信息....您可以更改它 – Baba 2013-02-26 13:12:31