85 votes

PHP get domain name

Je veux obtenir le nom de domaine de l'endroit où le script est exécuté. Comment peut-on faire cela avec PHP ? Je vois que $_SERVER['HTTP_HOST'] ainsi que $_SERVER['SERVER_NAME'] contiennent cette information. Cette variable fonctionnera-t-elle toujours et dois-je utiliser l'une plutôt que l'autre ?

Merci.

0 votes

Cela répond en partie à ma question sur l'utilisation de SERVER_NAME plutôt que de l'autre, mais est-ce la bonne façon de procéder en PHP ? (c'est l'autre partie) Merci.

89voto

chapagain Points 6536

Une question similaire a déjà été posée sur stackoverflow.

Voir ici : PHP $_SERVER['HTTP_HOST'] vs. $_SERVER['SERVER_NAME'], est-ce que je comprends correctement les pages du manuel ?

Voir aussi cet article : http://shiflett.org/blog/2006/mar/server-name-versus-http-host

Recommandé d'utiliser HTTP_HOST, et de se rabattre sur SERVER_NAME uniquement si HTTP_HOST n'était pas défini. Il a indiqué que SERVER_NAME pourrait être peu fiable sur le serveur pour diverses raisons, notamment :

  • pas de support DNS
  • mal configuré
  • derrière un logiciel d'équilibrage de charge

Source : : http://discussion.dreamhost.com/thread-4388.html

1 votes

HTTP_HOST me semble correct. SERVER_NAME fonctionnait bien jusqu'à ce que nous commencions à utiliser Docker, qui nous donnait alors simplement "localhost". Notez simplement que HTTP_HOST vous donnera également le sous-domaine.

7voto

xzyfer Points 6465

Pour répondre à votre question, ils devraient fonctionner tant que :

  • Votre serveur HTTP transmet ces valeurs à PHP (je ne connais pas de serveur qui ne le fasse pas).
  • Vous êtes no accès au script via la ligne de commande (CLI)

Mais, si je me souviens bien, ces valeurs peuvent être falsifiées dans une certaine mesure, il est donc préférable de ne pas s'y fier.

Ma préférence personnelle est de définir le nom de domaine comme une variable d'environnement dans l'hôte virtuel apache2 :

# Virtual host
setEnv DOMAIN_NAME example.com

Et le lire en PHP :

// PHP
echo getenv(DOMAIN_NAME);

Toutefois, cela n'est pas applicable dans toutes les circonstances.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X