我做错了什么
我一直在为此挣扎一两个礼拜,而我似乎无法解决它。这是我的脚本:我做错了什么
<?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
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;
}
你有你的数组数不匹配您在使用本应该帮助指针。也被检查字符串而不是整数...
$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;
}
谁投了票如果可以解释!!! – 2013-02-22 21:59:07
你现在有+1! – Sir 2013-02-22 22:08:27
第一回波的$域
echo $_SERVER['SERVER_NAME'];
然后print_r的您$ paryDomain
print_r($paryDomain);
如果这些都是正确的,回声您的计数( )
echo count(explode(".",$_SERVER['SERVER_NAME']));
只是想告诉你一个更简单的方法来做到这一点。它将支持无限的子域的域,因为它抓住了最后两个部分总是:
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;
@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
'ICANN以185,000美元的价格销售自定义*域名哇..感谢您的信息....您可以更改它 – Baba 2013-02-26 13:12:31
我要说明显的原因是$ RootDomain既不是字符串的你比较它太...也许你可以呼应它并看看实际价值是什么...? – MrHug 2013-02-22 21:47:05
开始在整个逻辑中的各个点回显变量,并查看它们开始时的位置,而不是您所期望的。 – ceejayoz 2013-02-22 21:47:06
“我在做什么错” 2013-02-22 21:47:08