获取访问者的ip地址对于很多应用很重要,包括登录、定位和重定向等。在php中IP信息储存在$_SERVER数组中,最方便的方法是使用如下的方式获取IP:
现在可以建立如下的准确获取用户IP地址的函数了:
<?php $ip = $_SERVER['REMOTE_ADDR']; ?>
但是这个方法不是完全准确,原因是用户可能使用了代理服务器,也就是说你获取的IP地址可能是代理服务器的IP地址,而不是用户真正的IP地址。
PHP也提供了别的方法区分这种情况了,代理服务器将用户发送的HTTP头部信息扩展了一些新的属性,用来存储原始用户访问的IP地址,因此为了更加准确的获取真实用户访问的IP地址,需要关注以下$_SERVER数组的键值。
<?php
$remote = $_SERVER['REMOTE_ADDR'];
$forwarded = $_SERVER['HTTP_X_FORWARDED_FOR'];
$client_ip = $_SERVER['HTTP_CLIENT_IP'];
?>
现在可以建立如下的准确获取用户IP地址的函数了:
<?php
function getIp(){
$ip = $_SERVER['REMOTE_ADDR'];
if($ip){
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
return $ip;
}
// There might not be any data
return false;
}
?>
Note:尽管使用了php自带的其他属性判断是否是代理服务器,但是这并不表示完全100%准确。这些属性的值是很容易被浏览器插件改变的,通过使用代理软件或者是代理网站。因此为了更加准确的获取用户的信息,可以使用将MAC地址存储在cookie中的方式来判断,从而在某些特定要求的应用中更加准确获取用户IP。
原文:http://www.codeproject.com/Articles/472118/GetplusIPplusAddressplususingplusPHP