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 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Golang使用pprof监控性能及GC调优

作者:峰云就她了 链接:http://xiaorui.cc/?p=3000 來源:个人博客

2773
来自专栏瓜大三哥

​UVM(九)之sequencej机制续1

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

23710
来自专栏Crossin的编程教室

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

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

3275
来自专栏灯塔大数据

技术| Python的从零开始系列连载(三十)

为了解答大家学习Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载,每周五准时推出,欢迎大家学积极学习转载~

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

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

1974
来自专栏布尔

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

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

1926
来自专栏木子昭的博客

前端脚本!网站图片素材中文转英文

692
来自专栏24K纯开源

Navigation Drawer的使用及遇到的问题

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

2005
来自专栏Golang语言社区

使用Go语言框架进行web开发笔记

前言 关于golang的web开发有不少框架,例如 martini, gin, revel,gorilla等。 之前玩过revel,感觉封装的太多了,作为一个小...

4037
来自专栏小白安全

绕过软WAF攻略

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

6055

扫码关注云+社区