PHP实现利用API获取IP所在城市

现在很多IP的接口api很多我例举几个常用的出来:

http://int.dpool.sina.com.cn/iplookup/iplookup.php //新浪 http://ip.ws.126.net/ipquery //网易 http://myip.ustclug.org/ //中科大 http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址] //淘宝

返回值大同小异,有些为json格式,有些为普通的文本格式,我们接下来从新浪的API入手。 首先判断新浪接口,应该是可以加上?ip=[ip地址]来获取的,这样就更加精准获取IP地址。 因为直接使用PHP的 file_get_contents($url) 返回值可能会出现获取到服务器的IP地址,而不是本地访问地址的情况。 所以解决办法如下:

$ip = $_SERVER["REMOTE_ADDR"]; $url="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=$ip"; //获取API值

这样就能获取到类似:

1 -1 -1 中国 云南 昆明

接下来从获取的参数入手,先考虑下截取字符串,把文字之前的字符删掉,我们可以用:

mb_substr($html,10,30,'gb2312'); //取$html变量的9-29的内容,删掉之前的字符

注意上面的gb2312,因为API的问题,获取的返回值为gb2312格式,取的时候需要带上编码。 截取之后效果如下:

中国 云南 昆明

嗯,效果快出来了,但是还有些莫名其妙的空格。我们接着清除多余的空格:

preg_replace('/[(\xc2\xa0)|\s]+/','', $iip); //删除$iiip中的空格

删除之后效果如下:

云南昆明

我已经把之前的中国删掉了,想保留的可把mb_substr($html,10,30,'gb2312'); 中的10改为7左右,即可出现国家代码, 这样可以统计国外的国家,国内自然没多大必要。 之后把获取的值gb2312转换为utf8,方便存入数据库,防止数据库乱码

iconv("gb2312","utf-8//IGNORE",$iipp); //api默认格式为gb2312,转换为utf-8格式

把获取之后的值存为变量,更新数据库值改为变量值即可存入数据库,就能统计用户登陆地址啦。 附上我的全部代码:

<?php $ip = $_SERVER["REMOTE_ADDR"]; //获取当前IP $url="http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=$ip"; //获取API值 $html = file_get_contents($url); //赋值为html变量 $iip=mb_substr($html,7,30,'gb2312'); //截取9-29的数字,前面为字母,丢弃 $iipp=preg_replace('/[(\xc2\xa0)|\s]+/','', $iip); //删除字符串中的空格 $iiip = iconv("gb2312","utf-8//IGNORE",$iipp); //api默认格式为gb2312,转为utf-8 echo $iiip; ?>

在线使用这个工具,直接调用即可,可返回地区 https://4ker.cc/ip.php 当然,这是我花半天研究出来的一种办法,我相信办法肯定不止一种,还有json截取之类的方法 有其他办法实现获取城市信息的同学欢迎与我交流

» 本文链接:PHP实现利用API获取IP所在城市 » 转载请注明来源:刺客博客

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏阿凯的Excel

Pandas读书笔记0(Anaconda与jupyter安装)

今天和大家分享一个编辑Python的神器!--Jupyter! 之前使用的是Python自带的IDLE,作为自带的系统,是和IE浏览器一样的存在! 用一张老图...

3214
来自专栏章鱼的慢慢技术路

《算法图解》第五章笔记与课后练习

2214
来自专栏企鹅号快讯

Python的初学者你现在可以自己“看”到代码的运行了!

最近小编一直在给群里小伙伴解决各种的错误,尤其是对一些基础薄弱的同学来说,出现错误后更是一脸懵逼!直到有一天,小编找到了Python Tutor,终于解脱了。 ...

2256
来自专栏24K纯开源

Navigation Drawer的使用及遇到的问题

ActionBar的问题     Navigation View是Android Support Library中的一个新的组件,该组件提供类似于Sliding...

2085
来自专栏游戏杂谈

url空格转码的问题

最开始我使用的是chrome,发现有脚本报错了,以为是服务器维护了,但再一想,不对啊,刚刚明明是好的,再返回首页,正常。再输入搜索信息,又遇到了这个界面。然后我...

1566
来自专栏Crossin的编程教室

【每周一坑】注册表单验证

长假过后,大家都缓过神来了吗?在这里祝大家上班快乐~ 今天来个应用题。在使用各种网站和应用时,少不了要注册账号,这种注册表单大家应该屡见不鲜了吧。 ? 一般这些...

3825
来自专栏布尔

Bing Map App 开发 还没入门遇见错误无法继续

很高兴看到Bing Map App SDK的发布,下载安装后,深入去看帮助文档的时候却发现Map App Test Tool 的链接并不可用,奇怪奇怪,无法继续...

2016
来自专栏小白安全

绕过软WAF攻略

现在软waf较为多,就在今年夏天苦逼挖洞的日子里经常遇到360主机卫士,安全狗,云锁之类的软waf进行拦截,经常碰到如下拦截提示: ? ? ? 看到以上...

7575
来自专栏java达人

说说JSON和JSONP( 含jquery例子)

说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义...

2925
来自专栏瓜大三哥

​UVM(九)之sequencej机制续1

UVM(九)之sequencej机制续1 当一个sequence启动起来之后,UVM会自动执行sequence的body任务,所以要产生各种和杨的激励,就要写好...

26510

扫码关注云+社区

领取腾讯云代金券