簡體   English   中英

如何使用ip start&ip end查找位置

[英]How to use ip start & ip end to find out location

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 = $_SERVER["HTTP_CLIENT_IP"]; , HTTP_X_FORWARDED_FOR & REMOTE_ADDR找出用戶的IP。

如何使用此變量來查找我的數據庫中的哪個國家/地區,州和城市?

ip_start和ip_end如何工作?

恩。 如果我的IP是$ip=123.243.51.83;

如何使用此$ ip從我的數據庫中查找位置?

IP地址可以轉換為數字。 您可以使用它來找出ip所在的范圍。

使用MySQL和INET_ATON

SELECT country FROM table WHERE 
INET_ATON("123.243.51.83") BETWEEN INET_ATON(ip_start) AND INET_ATON(ip_end);

使用PHP和ip2long

$yourIpLong = ip2long($yourIp);
if($yourIpLong > ip2long($ipStart) && $yourIpLong < ip2long($ipEnd)){
     //IP is in range $ipStart -> $ipEnd
}else{
    //IP is not in range.
}

請注意,這兩種解決方案都適用於IPv4。

如果以整數表示形式存儲IP地址會更好。 您可以使用MySql函數INET_ATON

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

$address = '174.36.207.186';

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

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

查詢(如果您已將其存儲為DB中的整數)將是:

SELECT *
FROM table
WHERE
".$integerIp." BETWEEN ip_start AND ip_end
LIMIT 1

您也可以像Jim回答的那樣直接在DB中進行轉換,但是如果您可以預先計算數據庫,那么為什么讓DB進行計算呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM