PHP程序查询IP地址归属地的方法
- 4726
- 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信息的更新。
对于小规模应用,最便捷的做法显然是调用新浪,淘宝等现成的接口。大不了把几个接口都写到程序里,一个接口失败了,就尝试调用另外一个接口,这样应该能大大增强程序的可靠性。
本想整理一下各种接口的调用,发现网上已经有人整理的很好了,直接引用了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | //获取当前用户的ip $ip = $_SERVER [ 'REMOTE_ADDR' ]; echo "您的IP地址: $ip <br/><br/>" ; echo " 例子1:调用新浪接口获取客户端IP地址信息<br/>" ; echo "============================<br/>" ; $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/>" ; $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的使用示例