【发布时间】:2011-09-07 15:58:17
【问题描述】:
我目前正在开发一个营销模块,用于跟踪为我们的网站带来流量的网站。有没有办法获取域名或IP?使用 PHP 的引用站点的地址?我相信 HTTP_REFERER 并不总是出现在 $_SERVER 全局变量中。
提前致谢。
【问题讨论】:
我目前正在开发一个营销模块,用于跟踪为我们的网站带来流量的网站。有没有办法获取域名或IP?使用 PHP 的引用站点的地址?我相信 HTTP_REFERER 并不总是出现在 $_SERVER 全局变量中。
提前致谢。
【问题讨论】:
HTTP_REFERER 标头必须由客户端的浏览器发送。你不能指望它被发送。
未发送的情况包括:
在这种情况下,你无能为力。
如果您控制链接站点,则可以在链接的 GET 参数中添加引荐来源网址:
http://example.com/?from=mysite
然后您可以解析脚本中的from 参数。
将引荐来源网址字符串转换为 IP 通常不是一个好主意,因为许多 IP 地址托管了数十或数百个站点。用户来自哪个站点的区别将会丢失。
【讨论】:
引用地址存在于所有合作浏览器的请求标头中,这些浏览器都有引用者。如果用户只是输入了您的 URL,那么就没有引荐来源网址。
将 URL 转换为 IP 地址是一件简单的编程事情:
<?php
$raddr = gethostbyaddr($_SERVER['HTTP_REFERER']);
?>
【讨论】:
如果 HTTP_REFERER 未显示在服务器中,则该用户没有通过链接进入您的站点,或者他有办法通过浏览器屏蔽该变量。您无能为力。
【讨论】:
如果它没有出现在 $_SERVER 中,通常意味着客户端没有发送它。推荐人是不能信任准确性的数据,因为它完全取决于用户(更具体地说是他们的浏览器)。
你最好的办法是检查referer是否在那里,然后在域上使用gethostbyname()函数来获取你想要的IP。
【讨论】:
您可以使用 $_SERVER['HTTP_REFERER'] 确定引用 URL,但请记住,这可以被操纵。
然后您可以使用gethostbyname($referrer) 获取IP 地址。
请参阅:http://php.net/manual/en/reserved.variables.server.php 和 http://php.net/manual/en/function.gethostbyname.php
【讨论】: