2011-06-03 99 views
2

我目前正在开发一个营销模块,用于跟踪将流量带入我们网站的网站。有没有办法获得域名或I.P.使用PHP引用网站的地址?我相信HTTP_REFERER并不总是出现在$ _SERVER全局中。确定I.P.引荐网站地址

谢谢先进。

回答

9

HTTP_REFERER头必须由客户端浏览器发送。你不能依靠它被发送。

方案时,它不会发送包括:

  • 用户打开一个链接在大的电子邮件客户端的一个

    • 用户输入用手地址谁go through great lengths to obscure the REFERER
    • 用户的浏览器被配置为阻止所述网址标头(罕见)
    • 用户被交换协议(即,在一个HTTP站点指向HTTPS一个,或者反之亦然的链接)

    在这些情况下,你无能为力。

    但是如果你控制链接的网站,你可以的GET参数添加引用ID的链接:

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

    然后你可以分析你的脚本from参数。

    将referrer字符串转换为IP通常不是一个好主意,因为看到尽可能多的IP地址可以承载数十或数百个站点。区别哪个用户来自哪个站点将会以这种方式丢失。

  • +0

    正如我所怀疑的。谢谢! Upped +并被接受! – 2011-06-03 09:16:19

    4

    引用地址出现在来自所有协作浏览器的请求头中,其中存在引荐者。如果用户只是输入了你的网址,那么就没有引用者。

    这是一个微不足道的设计问题向URL转换成IP地址:

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

    “琐碎的编程问题”实际上是一个问题。 – DOK 2011-06-03 08:46:47

    +0

    @DOK我不认为OP真的想要这个。将主机名转换为IP地址是一个可怕的想法(因为您有效地销毁了用户来自哪个站点的信息)。 – 2011-06-03 08:49:02

    +0

    @Pekka,它实际上很重要因为我需要从发起网站的IP地址获得国家:D – 2011-06-03 09:15:16

    2

    如果HTTP_REFERER没有在服务器出现,则该用户没有通过链接进入您的网站,或者他有一种通过浏览器屏蔽该变量的方法。没有其他的事情可以做。

    2

    如果它没有显示在$ _SERVER中,通常意味着客户端没有发送它。引荐来源是不可信的数据,因为它完全取决于用户(更具体地说是他们的浏览器)。

    最好的办法是检查引用者是否在那里,然后使用域上的gethostbyname()函数来获得你想要的IP。

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