2013-02-22 3 views
-4

J'ai lutté avec cela pendant une semaine ou deux maintenant, et je ne peux pas sembler résoudre le problème. Voici mon script:Qu'est-ce que je fais mal

<?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 "------------"; 

?> 

Pourquoi ai-je aucun résultat à la fin 1 ou 2 ..?

Toute aide serait grandement appréciée.

Neojakey

+1

je dirais que la cause évidente est que $ RootDomain est ni des chaînes que vous comparez aussi ... Peut-être que vous pouvez faire écho et voir quelle est la valeur réelle ...? – MrHug

+0

Commencez l'écho des variables à divers points de la logique et voyez où elles commencent à ne pas être ce que vous attendez. – ceejayoz

+15

"Qu'est-ce que je fais de mal" <- ne pas utiliser un titre approprié. –

Répondre

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

Vous avez eu votre compte tableau ne correspondent pas aux pointeurs que vous utilisiez cela devrait aider. Vous vérifiaient également des chaînes au lieu d'entiers ...

+0

J'ai fait ce changement et je n'ai toujours pas de sortie du script .. D'autres suggestions ..? – neojakey

+0

@neojakey voir edit :) vous deviez utiliser la fonction count pour compter la longueur du tableau et vous aviez les numéros de pointeur de tableau incorrect :) tableaux commencent à '0' – Sir

+0

@neojakey troisième édition ive ajouté un supplément si pour prendre en compte toutes les options – Sir

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

si $Array contient un élément alors $paryDomain[1] est existe pas, ou le tableau doit contenir un seul élément.

pour qui qui dit à propos de Array $ qui est entier:

$Array = 1; 
var_dump(($Array == "1")); 
var_dump(($Array == "2")); 

bool(true) 

bool(false) 

QU'EST-CE FAUTES EST: Votre nom du serveur le cas échéant ((www) example.com.?):

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

Parce que $paryDomain = explode(".",$Domain); contient au moins deux éléments, alors $ Array n'est jamais égal à un, seulement dans un cas, quand SERVER_NAME est un mot!

Solution:

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

qui a voté si peut expliquer !!! –

+0

vous avez +1 maintenant! – Sir

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

eh, toujours comme mon meilleur chemin :) – slattman

+0

Ouais si vous ne vous souciez pas de vérifier l'autre domaine 'dcwn.org' ... –

+0

je ne vois que deux options, et même s'il y avait plus, il ne serait pas être un gros problème pour ajouter une ligne pour chacun et par défaut avec 0. Il est encore moins d'écriture que d'utiliser un commutateur ou autrement. – slattman

0

premier écho de votre domaine $

echo $_SERVER['SERVER_NAME']; 

Alors print_r votre $ paryDomain

print_r($paryDomain); 

Et si ceux-ci sont corrects, écho votre compteur (

echo count(explode(".",$_SERVER['SERVER_NAME'])); 
1

Je voulais juste vous montrer un moyen plus facile de le faire. Il soutiendra les domaines avec des sous-domaines illimités car elle saisit les deux dernières parties toujours:

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 devrait '\. [Az \.] {2,6})' être changé en '\ . [az] +) '? Je pense que la période est une erreur? Aussi, cela limiterait le TLD à 2-6 caractères, mais l'ICANN a ouvert le [achat] (http://www.techspot.com/news/47031-icann-selling-custom-top-level-domains-for- 185000.html) de TLD afin que nous puissions avoir des domaines comme mysite.somefancytld dans le futur. –

+0

'ICANN vendant des domaines de haut niveau personnalisés pour 185 000 $' wow .. merci pour l'information .... vous pouvez le changer – Baba

Questions connexes