php 获取准确的ip,并通过ip准确获取所在区域 的方法
Posted piwenfei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 获取准确的ip,并通过ip准确获取所在区域 的方法相关的知识,希望对你有一定的参考价值。
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加)。
QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29LoD19) QQ:1542385235
-
腾讯的IP分享计划的查询接口连接是:http://ip.qq.com/cgi-bin/searchip,该连接后面会带有一个get参数searchip1,即searchip1=你要查询的IP地址。采用php向http://ip.qq.com/cgi-bin/searchip发送http get request,然后获取相应,获得相应结果后,将结果用正则表达式将需要的地理位置信息提取出来就OK了。当然,PHP发送get请求的方法有很多,我用curl来模拟http请求的方法
-
Curl是PHP的一个扩展,进行测试之前,先确认PHP已经加载了curl扩展。打开PHP配置文件php.ini,搜索 “extension=php_curl.dll”,将其前面的分号(;)去掉,然后重启HTTP服务器,查看phpinfo(),若能看到curl的信 息,说明PHP扩展curl成功
/*
*根据腾讯IP分享计划的地址获取IP所在地,比较精确
*/
public function getIPLoc_QQ($queryIP){
$url = ‘http://ip.qq.com/cgi-bin/searchip?searchip1=‘.$queryIP;
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_ENCODING ,‘gb2312‘);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
$result = curl_exec($ch);
$result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
curl_close($ch);
preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
$loc = $ipArray[1];
return $loc;
}
//获取当前用户ip
public function getip() {
$unknown = ‘unknown‘;
if(isset($_SERVER[‘HTTP_X_FORWARDED_FOR‘]) && $_SERVER[‘HTTP_X_FORWARDED_FOR‘] && strcasecmp($_SERVER[‘HTTP_X_FORWARDED_FOR‘], $unknown)){
$ip = $_SERVER[‘HTTP_X_FORWARDED_FOR‘];
}elseif(isset($_SERVER[‘REMOTE_ADDR‘]) && $_SERVER[‘REMOTE_ADDR‘] && strcasecmp($_SERVER[‘REMOTE_ADDR‘], $unknown)) {
$ip = $_SERVER[‘REMOTE_ADDR‘];
}
/**
* 处理多层代理的情况
* 或者使用正则方式:$ip = preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;
*/
if (false !== strpos($ip, ‘,‘)) $ip = reset(explode(‘,‘, $ip));
return $ip;
}
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加)。
QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29LoD19) QQ:1542385235
以上是关于php 获取准确的ip,并通过ip准确获取所在区域 的方法的主要内容,如果未能解决你的问题,请参考以下文章