- 浏览: 1881533 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wangyudong:
Wisdom RESTClient工具地址更新了哦https: ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
wangyudong:
很多REST Client是不支持自动化测试RESTful A ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
higkoo:
一个非常棒的系统,要是能支持LDAP等开源认证就完美了。
Cynthia 是个问题管理/BUG管理/任务管理/项目管理系统。 -
寻光之旅:
标签库使用有啥好处呢?
thinkphp 使用标签库的步骤 -
lgdjy123:
Android:TextView属性大全
当我们在页面中填写个人资料中的省市信息时,页面会根据当前用户所在的城市自动选中省市下拉选项;当我们访问某个大型站点时,网站程序会自动进入到用户当前所在的城市频道。这些功能是如何实现的呢?今天我们来通过实例讲解如何根据IP定位用户所在城市信息。
根据当前用户本地IP地址,查询IP地址库,获取IP所在的省市信息,目前有多种方式实现该功能。
1.调用新浪IP地址库
新浪提供了开放的IP地址库数据供开发者调用,调用地址:http://int.dpool.sina.com.cn/iplookup/iplookup.php,即可返回当前ip所在的省市信息。
我们结合本站helloweba文章:基于jQuery+JSON的省市联动效果中的省市下拉插件,来定位当前用户所在的省市,即默认状态选中的是当前用户所在的省市。
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery.cityselect.js"></script>
<script type="text/javascript" src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?
format=js"></script>
我们先载入jquery库和cityselect城市下拉插件,然后调用新浪的IP地址库,并以js的形式返回,当然如果你想查询某一指定IP所在的城市信息可以使用接口地址如:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=123.123.123.123,将参数ip值换成指定的IP地址即可。
本地js调用:
var myprovince = remote_ip_info['province'];
var mycity = remote_ip_info['city']
var mydistrict = remote_ip_info['district'];
$(function(){
$("#city_1").citySelect({
prov:myprovince,
city:mycity
});
});
HTML代码为:
<h3>调用新浪IP库接口</h3>
<p>您所在的城市是:<script>document.write(myprovince+' '+mycity);</script></p>
<div id="city_1">
<select class="prov"></select>
<select class="city"></select>
</div>
2.调用淘宝IP地址库
淘宝也提供了比较权威的IP地址库,调用地址:http://ip.taobao.com/service/getIpInfo.php?ip=123.123.123.123,返回对应IP的省市相关信息。
调用方法:
$(function(){
$.getJSON("getTaoIP.php",function(json){
var myprovince2 = json.data.region;
var mycity2 = json.data.city;
$("#city_2").html("您所在的城市是:"+myprovince2+mycity2);
});
});
getTaoIP.php用来获取淘宝的对应IP的省市信息,返回的是json格式的数据。
$ip = get_client_ip(); //获取当前用户的ip
$url = "http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
$data = file_get_contents($url); //调用淘宝接口获取信息
echo $data;
get_client_ip()用来获取本地用户的IP地址。
//获取用户真实IP
function get_client_ip() {
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"),
"unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR']
&& strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return ($ip);
}
3.调用纯真IP库
纯真IP库基本上每周都有更新,您可以到各大下载网站上下载最新版本的纯真IP库。推荐天空下载地址:http://www.skycn.com/soft/14344.html
使用PHP调用纯真ip库的方法,本文不详述,请戳这里:http://blog.csdn.net/aaron_luchen/article/details/6637799
4.调用本地数据库
如果您的系统足够强大,为了安全稳重我们建议您使用本地IP地址库,目前网上有IP地址库下载,我们使用mysql版的ip库,然后通过PHP读取。
由于IP数据量大,一般有三四十万条数据,我们要进行表结构索引优化。
CREATE TABLE IF NOT EXISTS `iptocity` (
`IP_Start` double(53,0) NOT NULL DEFAULT '0',
`IP_End` double(53,0) DEFAULT NULL,
`IP_Province` varchar(6) DEFAULT NULL,
`IP_City` varchar(10) DEFAULT NULL,
PRIMARY KEY (`IP_Start`),
KEY `IP_End` (`IP_End`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
调用方法:
$(function(){
$.getJSON("getIP.php",function(json){
var myprovince3 = json.province;
var mycity3 = json.city;
$("#city_3").citySelect({
prov:myprovince3,
city:mycity3
});
});
});
前端通过ajax向getIP.php发送异步请求,getIP.php读取mysql中的IP数据,返回对应ip地址的省市信息。
include_once("connect.php");//链接数据库
$myip = get_client_ip(); //获取本地IP,get_client_ip()函数在上文中已给出
$ip=ip2int($myip); //转换ip
$sql="select IP_Province,IP_City from iptocity where IP_Start<='$ip' order by IP_Start desc
limit 1";
$query = mysql_query($sql); //查询库
$rs = mysql_fetch_array($query);
$arr = array(
'province'=>$rs['IP_Province'],
'city'=>$rs['IP_City'],
);
echo json_encode($arr); //返回json数据
//将ip地址转换成整型
function ip2int($ip){
list($ip1,$ip2,$ip3,$ip4)=explode(".",$ip);
return $ip1*pow(256,3)+$ip2*pow(256,2)+$ip3*256+$ip4;
}
注意我们使用自定义函数ip2int()将IP地址转换成整型,而不是用PHP自带函数ip2long(),因为ip2long()有时会将ip转换成负数,所以为了保险使用自定义函数ip2int()。
5.应用:根据用户所在城市跳转到不同的页面
通过上面的讲解我们知道如何获取本地用户的城市信息,现在我们要根据用户所在的城市访问不同页面。我们以拉手网为例,在go.php中写入如下代码:
$city = $d['city']; //利用上述方法获得本地城市名称
switch($city){
case '深圳':
$cityname = 'shenzhen';
break;
case '北京':
$cityname = 'beijing';
break;
case '上海':
$cityname = 'shanghai';
break;
default:
$cityname = 'www';
break;
}
$go_url = "http://".$cityname.".lashou.com";
header("Location:".$go_url);
这样,就可以根据用户所在的城市跳转到拉手网对应的频道页面了。
发表评论
-
Lumen写事件
2018-02-10 10:46 8231.在事件里面定义事件 <?php /** * ... -
PHP设计模式之状态机模式-实现业务流控制
2018-01-28 11:16 1829应用场景:在我们日常开发中经常会遇到各种状态的切换,例如电 ... -
装wampserver时显示计算机丢失MSVCR110.dll
2017-03-07 10:15 1229http://www.microsoft.com/zh-CN ... -
phpdocument的使用
2016-10-25 16:24 652官网: https://www.phpdoc.org/ ... -
微信调试方法
2016-05-24 09:25 8041. 在本地搭建类似LAMP的环境(或者WAMP)都行,目的 ... -
创建自己的composer包
2015-12-10 17:01 1004创建一个composer/packagist包 在g ... -
微信nickname乱码及mysql编码格式设置(utf8mb4)
2015-12-08 12:24 1745将数据库的编码设置为utf8mb4_general_ci ... -
docker php 配置
2015-10-28 18:10 1128FROM php:5.6-fpm MAINTAINER S ... -
四种数据存储结构---顺序存储 链接存储 索引存储 散列存储
2015-08-15 21:54 1540存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 ... -
分享PHP代码检查经验
2015-08-09 23:03 1621问: 团队十多人开发, 如何保证代码规范统一? http ... -
php过滤只匹配中英文字符串
2015-08-04 15:26 1918<?php $str = "php $ ... -
移除emoji内容
2015-08-04 14:52 1256public static function removeE ... -
php 敏感词过滤高级版
2015-08-04 10:20 1504前面介绍过一个过滤了 ... -
php过滤广告内容(兼职,QQ号,淘宝兼职,网址)
2015-08-04 10:17 1180如果你网站有评论那么你肯定会发现你网站经常会被一人注入广告了 ... -
写第一个PHP扩展, 实现计算数组的个数
2015-07-20 19:09 1366需求: 写第一个PHP扩展, 里面包含一个函数叫 maxw ... -
PHP常用设计模式单例, 工厂, 观察者, 责任链, 装饰, 策略,适配,桥接模式
2015-07-15 11:08 1673// 多态, 在JAVA中是这样用的, 其实在PHP当中可 ... -
php命令行界面
2015-07-16 17:03 992常用选项 php -v php -i ... -
使用phpdocument
2015-07-14 17:05 907pear install phpdoc phpDocumen ... -
将session存储到数据库中
2015-07-14 15:33 838CREATE TABLE sessions ( id ... -
正则表达式向前查找向后查找,环绕或零宽断言
2015-07-14 12:40 2436向前查找和向后查找 1. 向前查找:根据要匹配的字符序列后 ...
相关推荐
在Web开发中,根据用户IP地址确定其地理位置是一种常见的需求。本文将详细解析一个PHP脚本如何通过IP地址来获取用户的所在城市,并进一步探讨该脚本的工作原理、关键函数的作用以及可能存在的问题。 #### 1. 获取...
在IT行业中,尤其是在Web开发领域,常常需要根据用户设备的IP地址来获取其大致的地理位置信息,以便提供个性化服务或进行数据分析。ThinkPHP5作为一款流行的PHP框架,提供了丰富的功能来帮助开发者实现这一需求。本...
在IT行业中,网络应用开发经常会遇到需要根据用户IP地址来获取其所在城市的场景。这个过程称为IP定位。本文将详细讲解如何使用PHP和jQuery这两种常见的Web开发技术来实现这一功能。 首先,我们要明白IP地址是互联网...
在IT行业中,根据IP地址判断用户所在城市是一项常见的任务,主要应用于地理位置服务、网络分析、个性化推荐等场景。这项技术的基础是IP地址与地理位置之间的映射关系,这通常通过IP库或者API服务来实现。 首先,...
在IT行业中,网络应用开发经常会遇到需要根据用户IP地址定位其所在城市的需求。"PHP+jQuery根据IP定位城市"是一个常见的技术实现方案,它结合了服务器端语言PHP和客户端脚本语言jQuery,来获取并处理用户的IP信息,...
ip定位城市,根据用户登录的ip获取用户所在城市
8. 处理内网IP:对于内网IP,因为它们不直接对应公网,所以获取城市信息更为复杂。可能需要通过NAT穿透、公网IP映射等技术来间接获取,或者依赖用户设备的其他信息(如GPS、Wi-Fi热点位置等)进行辅助定位。 综上所...
5. **结果展示**:将找到的城市信息展示给用户。 在实际应用中,为了提高效率和准确性,可能会采用缓存策略,预先计算并缓存常访问的IP地址。同时,考虑到隐私问题,定位服务通常只提供大范围的地理位置,而不是...
当我们需要获取访问网站用户的地理位置信息时,一个常见的需求就是根据用户的IP地址来定位到他们所在的城市。本篇文章将深入探讨如何使用PHP实现这一功能。 首先,理解IP地址的基本概念至关重要。IP地址(Internet ...
标题中的“基于PHP的仿8684根据IP判断用户所在城市”是一个PHP编程项目,目的是实现一个功能,即通过用户的IP地址来确定用户所在的城市,类似于8684网站提供的服务。8684是一个知名的提供公交、地铁查询等生活信息...
脚本绑定到场景对象上,结合天气数据库 WeatherAdCode.txt(放到Resources文件下)
它利用了IP地址与地理位置之间的关联,为用户提供他们所在城市的展示信息。 首先,我们来看看“qqwry”这个标签。"qqwry"指的是“QuickWry”,它是国内广泛使用的IP数据库,包含了全球IP地址到地理位置的映射。这个...
在这个场景中,我们关注的是如何利用PHP根据IP地址获取用户所在的城市代码,这在诸如网站访问统计、地理位置定位等服务中非常常见。这个过程涉及到TCP/IP协议、网络编程和数据库查询等知识。 首先,TCP/IP协议是...
3. **查找IP位置**:使用IP库,编写函数或调用API,根据用户的IP地址查找对应的地理位置信息。这通常涉及到二分查找或其他高效的搜索算法。 4. **返回城市信息**:一旦找到IP的地理位置,从中提取出城市信息并返回...
2. 查询IP地址:根据用户IP,通过二分查找或其他算法在数据库中找到对应的城市信息。 3. 重定向:一旦找到城市信息,使用`window.location.href`改变当前页面URL,将用户重定向到相应城市的页面。 另外,压缩包里的...
在IT行业中,我们经常需要根据用户的IP地址获取其所在的城市信息,这在提供个性化服务、数据分析、网络安全等领域具有重要作用。Java作为一种广泛使用的编程语言,提供了多种方法来实现这个功能。这篇博客“java根据...
2. **IP匹配**:当需要查询特定IP地址对应的城市时,通过已解析的数据结构快速找到这个IP地址所在的范围,并返回相应城市信息。 3. **异常处理**:有些IP地址可能未在数据库中记录,或者由于隐私保护策略,某些IP...
首先,标题中的“根据ip地址查询所在城市”是指通过特定的算法或服务,将互联网上的IPv4或IPv6地址转换为对应的城市信息。这通常涉及到IP地址的解析和地理定位技术。IP地址分为公有地址和私有地址,公有地址在全球...