2013-02-22 161 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