2011-08-10 4 views
4

Est-ce que $_SERVER['SERVER_ADDR'] est toujours défini?

Dois-je vérifier avec isset() ou est-ce inutile?

J'ai besoin pour obtenir l'adresse IP du site afin que je puisse savoir si elle est 127.0.0.1/localhost

Répondre

3

Il ne va pas toujours être défini. Considérons que vous pouvez installer PHP sans même avoir un serveur et l'exécuter à partir de la ligne de commande. Il n'y a aucune garantie avec l'une des variables $_SERVER, mais si vous l'essayez une fois sur votre serveur et que cela fonctionne, vous pouvez parier qu'il sera toujours défini sur cette configuration de serveur. Vous avez juste besoin de faire une note quelque part que si vous faites un changement majeur sur la configuration de votre serveur, ou si vous changez de serveur, vous devriez le vérifier à nouveau.

Vous pouvez également vérifier la valeur de vos variables serveur avec phpinfo()

3

Non, CLI ce n'est pas défini. Donc pas toujours.

$ php -r "echo $_SERVER['SERVER_ADDR'];" 

(pas de sortie)

Si vous avez des erreurs enregistrées ou signalées (en fonction de vos paramètres de php.ini), vous obtiendrez ce message ainsi:

PHP Notice: Undefined index: SERVER_ADDR in Command line code on line 1 
+1

Et pour cela absolument certain au douteux, il y a un avis de PHP: 'PHP Notice: Indéfini index: SERVER_ADDR dans le code de ligne de commande sur la ligne 1' –

+0

@MiloLaMar: Bon point, je l'ai ajouté à la réponse. – hakre

+0

Je n'étais pas convaincu '$ _SERVER ['SERVER_ADDR']' n'était pas simplement une chaîne vide, donc j'ai décidé de m'assurer :) –

1

CLI est un bon exemple de quand il est pas défini, mais toutes les _SERVER valeurs sont définies par le serveur que PHP est en cours d'exécution, donc en fonction Sur le serveur que vous utilisez et sa configuration, il n'y a aucune garantie qu'il sera défini de toute façon.

0

Comme précédemment dit via CLI ce n'est pas disponible. Juste au cas où vous avez besoin de connaître l'adresse IP à la fois via cli ou via HTTP appeler envisager d'utiliser quelque chose comme ce qui suit:

$IP = isset($_SERVER['SERVER_ADDR'])?$_SERVER['SERVER_ADDR']:gethostbyname(gethostname()); 
Questions connexes