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

如何获得该IP所在的地理位置呢?腾讯的IP分享计划(http://fw.qq.com/ipaddress)和新浪的IP查询接口(http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js)很不错,能够精确到市或县一级,因此就分别使用这两个查询接口了。

操作方法

  • 01

    腾讯的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请求的方法

  • 02

    Curl是PHP的一个扩展,进行测试之前,先确认PHP已经加载了curl扩展。打开PHP配置文件php.ini,搜索 “extension=php_curl.dll”,将其前面的分号(;)去掉,然后重启HTTP服务器,查看phpinfo(),若能看到curl的信 息,说明PHP扩展curl成功

  • 03

    /* *根据腾讯IP分享计划的地址获取IP所在地,比较精确 */ 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; }

新浪网

  • 01

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

  • 02

    /* *根据新浪IP查询接口获取IP所在地 */ function getIPLoc_sina($queryIP){ $url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$queryIP; $ch = curl_init($url); //curl_setopt($ch,CURLOPT_ENCODING ,'utf8'); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回 $location = curl_exec($ch); $location = json_decode($location); curl_close($ch); $loc = ""; if($location===FALSE) return ""; if (emptyempty($location->desc)) { $loc = $location->province.$location->city.$location->district.$location->isp; }else{ $loc = $location->desc; } return $loc; }

  • 03

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

(0)

相关推荐

  • Windows8系统中有线网卡自动获取IP地址设置步骤详细图解

    在局域网内,为了每个人都有自己的IP地址,但是有时候,还是会因为各种各样的原因致使IP冲突,并且,再不知道IP段的情况下,我们如何才能上网呢?这时候我们可以让电脑的有线网卡自动获取IP地址,这样既不不 ...

  • Win7有线网卡自动获取IP地址设置动画示范教程

    设置动画示范教程: Windows 7系统有线网卡自动获取IP地址的详细设置步骤如下: 第一步:鼠标点击电脑桌面右下角小电脑图标,在弹出的对话框中,点击 打开网络和共享中心。如下图所示: 第二步:弹出 ...

  • WinXP/Win7如何自动获取ip地址全程图解

    Windows XP 系统 ip 地址设置 第一步:右键点击桌面上的“网上邻居 ”,选择“属性 ” 第二步:右键点击“本地连接 ”,选择“属性 ” 注意:如果想配置无线网络ip,右键点击“无线网络连接 ...

  • Oracle VM Virtual中CentOS自动获取IP地址设置方法

    在CentOS配置网卡开机自动获取IP地址: vi /etc/sysconfig/network-scripts/ifcfg-eth0 将 ONBOOT="no" 改为 ONBOOT="yes" 保存 ...

  • 电脑无法自动获取IP地址怎么办?

    故障排查: 由于笔者公司的客户机是通过DHCP服务器自动获取IP地址的,所以出现这种提示信息应该是客户机没有分配到IP地址所致。在“运行”中键入 “cmd”,进入“命令窗口”,输入“ipconfig” ...

  • 网卡无法获取IP地址自己给他找个

    电脑出现网卡无法获取IP地址出现这类问题,可以尝试更改网卡工作模式来解决。展开“设备管理器”中的“网络适配器”,然后双击网卡驱动标志,然后切换到 “高级”选项,在属性中将网卡工作速率模式由自动模式改为 ...

  • 如何自动获取ip地址

    Windows XP 系统如何自动获取ip地址 第一步:右键点击桌面上的“网上邻居”,选择“属性” 第二步:右键点击“本地连接”,选择“属性” 注意:如果想配置无线网络ip,右键点击“无线网络连接”选 ...

  • Windows7有线网卡自动获取IP地址设置

    设置动画示范教程: Windows 7系统有线网卡自动获取IP地址的详细设置步骤如下: 第一步:鼠标点击电脑桌面右下角小电脑图标,在弹出的对话框中,点击 打开网络和共享中心。如下图所示: 第二步:弹出 ...

  • Windows XP系统有线网卡自动获取IP地址设置

    设置动画示范教程: Windows XP系统有线网卡自动获取IP地址设置动画 操作步骤: Windows XP系统有线网卡自动获取IP地址的详细设置步骤如下: 第一步:电脑桌面上找到 网上邻居 的图标 ...