在所有返回当前访问者info/ip 的函数中,只有第一个一个似乎输出:
echo $_SERVER["REMOTE_ADDR"];
echo $_SERVER["HTTP_X_FORWARDED"];
echo $_SERVER["HTTP_X_CLUSTER_CLIENT_IP"];
echo $_SERVER["HTTP_FORWARDED_FOR"];
echo $_SERVER["HTTP_FORWARDED"];
首要问题:为什么其他函数不输出任何东西?
附加问题:在这方面是否有其他很酷的函数例如输出访问者使用的浏览器的函数&平台?同样有用的是把游客的城市、最喜欢的饮料、最喜欢的颜色用RGB标注出来……:)谢谢你的建议!
- 它不是函数,而是数组成员。
- 它们输出的是而不是IP地址,而是HTTP标头(注意其中的
HTTP_
) - 包含IP地址的只有
$_SERVER["REMOTE_ADDR"]
为什么其他函数不输出任何东西?
因为这些HTTP头是可选的。
肯定还有其他很酷的函数吗
print_r($_SERVER);
将向您展示它们
注意get_browser()函数,它可以帮助您从User-Agent头中获取更多结构化信息。
使用$_SERVER['HTTP_USER_AGENT']将得到如下结果:
Mozilla/5.0(麦金塔电脑;U;PPC Mac OSX;zh) AppleWebKit/418(如KHTML壁虎)Safari/417.9.3
你可以用它来计算操作系统和浏览器
试一试,得到你想要的:
echo "<pre>";
print_r($GLOBALS);
echo "</pre>";
首先,您应该使用如下内容:
var_dump($_SERVER);
查看$_SERVER
变量:在那里,你会发现很多有用的东西,在浏览器发送的HTTP头中。
例如:
-
HTTP_USER_AGENT
:浏览器发送的User-Agent字符串- 例如,我的是
Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.2.16) Gecko/20110323 Ubuntu/10.04 (lucid) Firefox/3.6.16
HTTP_ACCEPT_LANGUAGE
:浏览器发送的语言首选项- 例如:
fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
注意:这些只是指示!
- 它们可以被伪造(甚至包含恶意数据)
- 他们不可能在那里。
然后,当需要查找用户的IP地址时:
-
REMOTE_ADDR
通常包含此信息 - 但是它可以在其他条目中,通常当用户是代理时-因此转发的标头。
主要答案:在服务器端,您只能输出浏览器提供的信息。因此,如果浏览器没有发送"HTTP_X_CLUSTER_CLIENT_IP"信息,服务器和php当然无法输出它。
除此之外,$_SERVER的文档中没有任何类似"HTTP_FORWARDED"的内容。
奖金答:由于浏览器默认情况下不发送这些信息,您必须通过JS获取它们并通过您的on发送它们,就像跟踪工具一样(看看piwik,它是开放代码)或从您获得的其他信息中捕获它们,如$_SERVER['HTTP_USER_AGENT'](见注释)