PHP程序查询IP地址归属地的方法
- 4222
- PHP
- 5
- super_dodo
- 2013/11/19
程序中查询一个IP地址的归属地信息,方法有很多种。概括起来有两类:
1. 调用某些网站提供的web api接口
好处是显而易见的,使用便捷,开发成本低,自己不需要维护IP地址信息库。坏处也很明显,受制于人,服务说停就停。
2. 自己编程,查询本地的IP地址信息库
这种方式完全自主,使用起来没有任何限制。不过需要自己维护IP地址信息库,起码每年更新几次还是有必要的。国内最常用的IP地址信息库就是纯真IP地址信息库了。
下载网站1:http://www.cz88.net 下载网站2:http://www.crsky.com/soft/2611.html
需要注意的是,虽然php可以直接访问qqwry.dat文件进行查询,但是如果查询比较频繁的话,建议还是采用使用C编写成的qqwry.so这样的php扩展模块效率更高。在Linux下很容易进行安装。具体可以参照http://www.open-open.com/lib/view/open1334717267889.html
还有一种做法是使用数据库维护一个IP地址信息库。难点主要是如果拿到一份正确的数据库(去淘宝上买?哪里有官方的?)以及从哪里获取IP信息的更新。
对于小规模应用,最便捷的做法显然是调用新浪,淘宝等现成的接口。大不了把几个接口都写到程序里,一个接口失败了,就尝试调用另外一个接口,这样应该能大大增强程序的可靠性。
本想整理一下各种接口的调用,发现网上已经有人整理的很好了,直接引用了:
//获取当前用户的ip $ip = $_SERVER['REMOTE_ADDR']; echo "您的IP地址: $ip <br/><br/>"; echo " 例子1:调用新浪接口获取客户端IP地址信息<br/>"; echo "============================<br/>"; $url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=".$ip; $result = file_get_contents($url); //var_dump(json_decode($result)); $ip_info = json_decode($result); echo "ret: " . $ip_info->ret . "<br />"; echo "start: " . $ip_info->start . "<br />"; echo "end: " . $ip_info->end . "<br />"; echo "country: " . $ip_info->country . "<br />"; echo "province: " . $ip_info->province . "<br />"; echo "city: " . $ip_info->city . "<br />"; echo "district: " . $ip_info->district . "<br />"; echo "isp: " . $ip_info->isp . "<br />"; echo "desc: " . $ip_info->desc . "<br />"; echo "============================<br/>"; echo "<br/>"; echo "例子2:调用淘宝接口获取客户端IP地址信息<br/>"; echo "============================<br/>"; $url = "http://ip.taobao.com/service/getIpInfo.php?ip=".$ip; $result = file_get_contents($url); //var_dump(json_decode($result)); $ip_info = json_decode($result); if((string)$ip_info->code=='0'){ $info = $ip_info->data; echo "country: " . $info->country . "<br />"; echo "country_id: " . $info->country_id ."<br />"; echo "area: " . $info->area . "<br />"; echo "area_id: " . $info->area_id . "<br />"; echo "region: " . $info->region . "<br />"; echo "region_id: " . $info->region_id . "<br />"; echo "city: " . $info->city . "<br />"; echo "city_id: " . $info->city_id . "<br />"; echo "county: " . $info->county . "<br />"; echo "county_id: " . $info->county_id . "<br />"; echo "isp: " . $info->isp . "<br />"; echo "isp_id: " . $info->isp_id . "<br />"; echo "ip: " . $info->ip . "<br />"; } echo "============================<br/>"; echo "<br/>"; echo " 例子3:查询本地qqwry.dat文件<br/>"; echo "============================<br/>"; // 调用查询qqwry.dat的函数 $ip_info = query_qqwry($ip); // 注意:qqwry文字编码位GB2312,这里转成UTF-8格式 $ip_info = iconv("GB2312","UTF-8",$ip_info) ; echo "IP地址数据库(QQIP地址)V2013.08.25纯真版:" . $ip_info . "<br/>"; echo "============================<br/>"; echo "灰常抱歉,该方法因为需要更新数据信息,个人认为实用性不大.请参考原文.";
php调用这些接口的执行效果:http://www.tudaxia.com/demo/get_ip_info.php
原文地址:http://www.tudaxia.com/archives/617
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例