ThinkPHP获取ip地址,或者数字地址和ip地理位置的查询
1.TP 中获取客户端IP地址的系统公共函数是:function get_client_ip()。返回值就是IP地址或者数字地址
看下源码:
function get_client_ip($type = 0,$adv=false) {$type = $type ? 1 : 0;static $ip = NULL;if ($ip !== NULL) return $ip[$type];if($adv){if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);$pos = array_search('unknown',$arr);if(false !== $pos) unset($arr[$pos]);$ip = trim($arr[0]);}elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {$ip = $_SERVER['HTTP_CLIENT_IP'];}elseif (isset($_SERVER['REMOTE_ADDR'])) {$ip = $_SERVER['REMOTE_ADDR'];}}elseif (isset($_SERVER['REMOTE_ADDR'])) {$ip = $_SERVER['REMOTE_ADDR'];}// IP地址合法验证$long = sprintf("%u",ip2long($ip));$ip = $long ? array($ip, $long) : array('0.0.0.0', 0);return $ip[$type];
}
get_client_ip(0)返回ip get_client_ip(1)返回ipv4的数字地址
2.查询ip的地理位置,这里要下载ip库(UTFWry.dat),地址:http://www.thinkphp.cn/extend/270.html
并把下载好的dat文件放入和IpLocation.class.php同级目录中
在Controller中写如下代码:
use Org\Net\IpLocation;
//把IpLocation导入
$ip=new Iplocation();//新建一个IP查询对象
$location=$ip->getlocation();
var_dump($location);这里不贴getlocation()的源码了,太长了,有兴趣的人可以自己去看哦
最终结果下:
$location['ip'] // IP地址
$location['beginip'] // 用户IP所在范围的开始地址
$location['endip'] // 用户IP所在范围的结束地址
$location['country'] // 所在国家或者地区
$location['area'] // 所在区域
getlocation()还可以获取指定域名的地理位置信息
$ip=new IpLocation();
$location=$ip->getlocation('baidu.com');//获取百度的
var_dump($location);
当然直接传ip也是可以的,就不举例
如果你使用的IP地址库文件不是UTFWry.dat(注意在Linux下面文件名的大小写也需要一致)的话,我们需要在实例化IpLocation类的时候传入地址库文件名,例如:
如果你的IP地址库是GBK编码的话,需要对返回结果进行编码转换。例如:
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
