首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ip启动和ip端查找位置

如何使用ip启动和ip端查找位置
EN

Stack Overflow用户
提问于 2013-08-13 12:17:38
回答 2查看 501关注 0票数 0
代码语言:javascript
复制
type    ip_start    ip_end          country     state       city

ipv4    0.0.0.0     0255.255.255    US          California  Los Angeles
ipv4    1.0.0.0     1.0.0.255       AU          Queensland  Brisbane

我有一个包含国家、州和城市ip列表的表。

我的问题是如何从我的数据库中检测用户的ip位置

如果我使用php $ip = $_SERVER["HTTP_CLIENT_IP"]; , HTTP_X_FORWARDED_FOR & REMOTE_ADDR来查找用户的ip。

如何使用这个变量从db?中找出哪个国家、州和城市

ip_start & ip_end是如何工作的?

例如。如果我的ip是$ip=123.243.51.83;

如何使用这个$ip从我的数据库中查找位置?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-13 12:41:26

IP地址可以转换为数字。您可以使用这个来找出ip在哪个范围内。

使用MySQL和INET_ATON

代码语言:javascript
复制
SELECT country FROM table WHERE 
INET_ATON("123.243.51.83") BETWEEN INET_ATON(ip_start) AND INET_ATON(ip_end);

使用PHP和ip2long

代码语言:javascript
复制
$yourIpLong = ip2long($yourIp);
if($yourIpLong > ip2long($ipStart) && $yourIpLong < ip2long($ipEnd)){
     //IP is in range $ipStart -> $ipEnd
}else{
    //IP is not in range.
}

请注意,这两种解决方案都适用于IPv4。

票数 1
EN

Stack Overflow用户

发布于 2013-08-13 12:48:42

最好将IP地址存储在整数表示形式中。为此,您可以使用MySql函数阿顿

在PHP中,您可以使用以下方法计算它:

代码语言:javascript
复制
$address = '174.36.207.186';

$addressArray = explode('.', $address);

$integerIp =   ( 16777216 * $addressArray[0] )
             + (    65536 * $addressArray[1] )
             + (      256 * $addressArray[2] )
             +              $addressArray[3];

查询(如果您已将其存储为DB中的整数)将是:

代码语言:javascript
复制
SELECT *
FROM table
WHERE
".$integerIp." BETWEEN ip_start AND ip_end
LIMIT 1

您也可以像Jim回答的那样直接在DB中进行转换,但是如果可以预先计算,为什么要让DB执行计算呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18208876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档