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

+0

Начните повторять переменные в разных точках всей логики и посмотреть, где они начинают не то, что вы ожидаете. – ceejayoz

+15

«Что я делаю неправильно» <- не используя соответствующий заголовок. –

ответ

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

+0

@neojakey см. Edit :) вам нужно было использовать функцию count для подсчета длины массива, и у вас были неправильные номера указателей на массивы :) массивы начинаются с '0' – Sir

+0

@neojakey third edit ive добавлено дополнительно, если учесть все опции – Sir

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) 

ЧТО обидах IS: Ваше имя сервера, если любой ((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

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

eh, все равно, как мой способ лучше :) – slattman

+0

Да, если вам не нужно проверять другой домен 'dcwn.org' ... –

+0

Я вижу только два варианта, и даже если бы их было больше, очень важно добавить строку для каждого, а по умолчанию - 0. Это еще меньше, чем использование переключателя или иначе. – slattman

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 в будущем. –

+0

'ICANN продает пользовательские домены верхнего уровня за $ 185 000' вау .. спасибо за информацию .... вы можете ее изменить – Baba

 Смежные вопросы

  • Нет связанных вопросов^_^