PHP获取IP地址所在的地理位置

时间:2011-04-02 16:19来源:三知开发网 作者:许亮 点击: 787 次
http://www.sunchis.com/html/php/phpsource/2011/0402/295.html
分享到
腾讯微博
新浪微博
搜狐白社会
人人网
百度空间
Google书签
知道访问者的IP地址,如何获得该IP所在的地理位置呢?我首先想到的是ip138,因为我经常使用这个网站来查询IP所在地。但是,这个网站查询到的结果只精确到省,让人不太满意。经过

知道访问者的IP地址,如何获得该IP所在的地理位置呢?我首先想到的是ip138,因为我经常使用这个网站来查询IP所在地。但是,这个网站查询到的结果只精确到省,让人不太满意。经过网上查询,腾讯的IP分享计划(http://fw.qq.com/ipaddress)和新浪的IP查询接口(http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js)很不错,能够精确到市或县一级,因此就分别使用这两个查询接口了。

一、PHP利用腾讯IP分享计划获取IP地理位置

腾讯的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成功。

接下来就简单了,一段代码就可以搞定:

view plain   copy
  1. /*
  2. *根据腾讯IP分享计划的地址获取IP所在地,比较精确
  3. */
  4. function getIPLoc_QQ($queryIP){
  5. $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
  6. $ch = curl_init($url);
  7. curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');
  8. curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
  10. $result = curl_exec($ch);
  11. $result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
  12. curl_close($ch);
  13. preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
  14. $loc = $ipArray[1];
  15. return $loc;
  16. }

使用getIPLoc_QQ("183.37.209.57")即可得到IP地址所在的地址位置。

腾讯IP分享计划这个网站用的是gb2312编码,获取的响应需要用mb_convert_encoding函数进行编码转换,否则会有乱码。

二、PHP利用新浪IP查询接口获取IP地理位置

新浪的IP查询接口地址是:http://int.dpool.sina.com.cn/iplookup/iplookup.php,该连接后面也带有get参数,参数ip=你要查询的IP地址,format=返回的查询结果格式。为了方便起见,返回的格式采用json,即format=json,因此,PHP出来扩展curl外,还得扩展json:

view plain   copy
  1. /*
  2. *根据新浪IP查询接口获取IP所在地
  3. */
  4. function getIPLoc_sina($queryIP){
  5. $url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$queryIP;
  6. $ch = curl_init($url);
  7. //curl_setopt($ch,CURLOPT_ENCODING ,'utf8');
  8. curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
  10. $location = curl_exec($ch);
  11. $location = json_decode($location);
  12. curl_close($ch);
  13. $loc = "";
  14. if($location===FALSE) return "";
  15. if (emptyempty($location->desc)) {
  16. $loc = $location->province.$location->city.$location->district.$location->isp;
  17. }else{
  18. $loc = $location->desc;
  19. }
  20. return $loc;
  21. }

使用getIPLoc_sina("183.37.209.57")即可得到IP地址所在的地址位置。

当然,如果显示的时候对每个IP地址都用上述函数查询一次,会很慢很慢……最好是每来一个访客访问页面的时候,就调用函数查询其IP对应的地理位置,然后存入数据库。等到显示的时候直接从数据库读取就好了,这样效率会高一些。

测试页面:

http://www.sunchis.com/public/CodeTest/00000295_ipLocation.php

测试源码下载:

http://dl.dbank.com/c042gwqtrg

测试结果截图:

(责任编辑:admin)

PHP获取IP地址所在的地理位置相关推荐

  1. PHP 获取 IP 地址所在的地理位置信息/城市

    源码:https://github.com/hacfins/thinkphp6-api/blob/master/app/common/third/MapService.php 类似的博客很多,五花八门 ...

  2. php获取ip地址所在的地理位置的实现

    1,通过腾讯或者新浪提供的接口来获取(新浪和腾讯类似) <?php     function getIPLocation($queryIP){      $url = 'http://ip.qq ...

  3. phpip地址查询_PHP获取IP地址所在的地理位置

    /* *根据新浪IP查询接口获取IP所在地 */ function getIPLoc_sina($queryIP){ $url = 'http://int.dpool.sina.com.cn/iplo ...

  4. php 获取ip地址所在的区域

    /** * get_ip_lookup 获取ip地址所在的区域 * @param null $ip * @return bool|mixed */ function get_ip_lookup($ip ...

  5. php 获取客户端位置信息_PHP中获取客户端IP地址所在的地理位置信息

    如何获得该IP所在的地理位置呢?腾讯的IP分享计划(http://fw.qq.com/ipaddress)和新浪的IP查询接口(http://int.dpool.sina.com.cn/iplooku ...

  6. python地址多少位_Python获取IP地址对应的地理位置信息!

    在学习中有迷茫不知如何学习的朋友小编推荐一个学Python的学习q u n 227 -435- 450可以来了解一起进步一起学习!免费分享视频资料 原理简介 利用了三个可以查询ip地址对应归属地的网站 ...

  7. PHP获取IP地址以及IP地址所在位置

    获取IP地址: function getIP(){if (isset($_SERVER)) {if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {$realip ...

  8. linux下载python的地址_Linux下Python获取IP地址的代码

    <lnmp一键安装包>中需要获取ip地址,有2种情况:如果服务器只有私网地址没有公网地址,这个时候获取的IP(即私网地址)不能用来判断服务器的位置,于是取其网关地址用来判断服务器在国内还是 ...

  9. 获取IP地址信息的API合集

    今天给大家分享一些获取IP地址信息的API合集 一.ip.cn查询网获取当前客户端IP 二.ip查询网获取当前客户端IP 三.百度获取IP地址信息 四.本站获取当前客户端IP信息 五.其他平台获取IP ...

最新文章

  1. phpinfo 信息利用
  2. iOS NSUserDefaults 简介 NSUserDefaults 存储自定义对象
  3. 02.elasticsearch-meta-field元字段
  4. 25 个在 Web 中嵌入图表的免费资源
  5. JDK8HashMap的扩容核心解读,尾插法
  6. OMNeT学习之OMNeT安装与运行
  7. 黑色响应式全屏滚动主页源码
  8. .net WebApi 批量文件进行压缩zip以二进制流传输至前端(Vue)下载
  9. PAT1021. 个位数统计
  10. java jasper 生成xlsx_JasperReports导出到xlsx,而不是xls
  11. laravel的blade模板的布局嵌套
  12. python积最大的分解_pyfactor
  13. NVIDIA Nsight Eclipse 安装
  14. 20篇聊天机器人领域必读论文速递!
  15. matlab动态更新数组值,Matlab动态数组实现
  16. 基于springboot点餐系统java web订餐管理平台源码
  17. talfta---动态故障树分析软件产品介绍
  18. Oracle Linux网卡参数默认设置导致ORA-603
  19. power supply框架
  20. echarts雷达图文字不显示_ECharts雷达图指示器名称的设置

热门文章

  1. JSP中页面跳转response.sendRedirect()和request.getRequestDispatcher()的区别
  2. java8新特新:接口流-Stream()接口和所有方法(map,foreach,filter,count,distinct,limit,collect,skip,sorted)
  3. oracle spa sta 使用,Oracle的SQL Tuning Advisor(STA) 到底做了什么?
  4. ajax nginx 转发 sessionid_Nginx+Apache实现动静分离 - 孙天飞
  5. 剑指offer(34-40题)详解
  6. 在R.java中新建自定义的新类
  7. javascript之DOM总结
  8. 在linux命令行 下学习编写java
  9. 剑指Offer #09 变态跳台阶(数列推导)
  10. python type help copyright_Python关于import的实验(8)__init__.py文件内部代码的执行以及内部的导入和内部的变量...