2011-06-03 1 views
2

Je travaille actuellement sur un module marketing qui permet de suivre les sites qui génèrent du trafic sur notre site. Y at-il un moyen d'obtenir le domaine ou I.P. adresse du site de référence en utilisant PHP? Je crois que HTTP_REFERER ne s'affiche pas toujours sur le $ _SERVER global.Déterminer I.P. Adresse du site référent

Merci à l'avance.

Répondre

9

L'en-tête HTTP_REFERER doit être envoyé par le navigateur du client. Vous ne pouvez pas compter sur l'envoi.

Scénarios quand il ne s'envoyé comprennent pas:

  • L'utilisateur entre l'adresse à la main
  • L'utilisateur ouvre un lien dans l'un des grands clients E-Mail qui go through great lengths to obscure the REFERER
  • de l'utilisateur le navigateur est configuré pour bloquer l'en-tête du référent (rare)
  • L'utilisateur change de protocole (c.-à-d. un lien sur un site http pointant vers un site https, ou vice versa)

Dans ces cas, il n'y a rien que vous puissiez faire.

Si vous contrôlez le site de liaison cependant, vous pouvez ajouter un ID referrer dans le paramètre GET sur le lien:

http://example.com/?from=mysite 

vous pouvez ensuite analyser le paramètre from dans votre script.

La conversion de la chaîne de provenance vers une adresse IP n'est généralement pas une bonne idée, car de nombreuses adresses IP hébergent des dizaines ou des centaines de sites.La distinction dont est issu le site sera perdue de cette façon.

+0

Comme je l'ai soupçonné. Merci! Upped + et accepté! –

4

L'adresse de référence est présente dans l'en-tête de demande de tous les navigateurs coopérants pour lesquels il existe un référent. Si l'utilisateur vient de taper votre URL, il n'y a pas de référent.

Il est une question de programmation trivial pour convertir l'URL en une adresse IP:

<?php 
$raddr = gethostbyaddr($_SERVER['HTTP_REFERER']); 

?> 
+0

Cette «question de programmation triviale» est en fait la question. – DOK

+0

@DOK Je ne pense pas que le PO veuille vraiment ça. La conversion du nom d'hôte en adresse IP est une mauvaise idée (car vous détruisez effectivement les informations sur le site d'origine de l'utilisateur). –

+0

@Pekka, il est en fait important parce que j'ai besoin d'obtenir le pays de l'adresse IP du site d'origine: D –

2

Si HTTP_REFERER ne se présente pas dans le serveur, cet utilisateur n'a pas entrer dans votre site par un lien, ou il a un moyen de masquer cette variable via son navigateur. Pas grand chose d'autre que tu puisses faire.

2

S'il n'apparaît pas dans $ _SERVER, cela signifie généralement que le client ne l'envoie pas. Le référent est une donnée qui ne peut être fiable car elle dépend entièrement de l'utilisateur (plus précisément de son navigateur).

Votre meilleur pari est de vérifier si le référant est là, puis utilisez la fonction gethostbyname() sur le domaine pour obtenir l'IP que vous voulez.

http://php.net/manual/en/function.gethostbyname.php

Questions connexes