如何使用IP地址和国家代码获得地理定位
地理定位提供了关于用户地理位置的信息。具体来说,IP地址被地理定位服务用来确定位置。
在本教程中,你将学习如何使用一个IP地址和一个国家名称及代码来获得地理位置。这是一个两步的过程,第一步是获取IP地址,第二步是获取地理位置。
PHP的基础知识。
文本编辑器 - VScode。
完成本教程后,你应该能够做到以下几点。
获取当前的IP地址。
使用PHP cURL API获取区域。
知道获取地理位置的不同用途
如何启用/禁用Geolocation API。
关于这个例子
本例使用IPWhoIs地理定位API工具,通过使用IP地址查询位置数据。该API端点寻找任何IPV4、IPv6或任何域作为参数,同时读取地理位置请求。
这段代码执行了一个两步流程来输出位置数据。它创建了一个带有函数的PHP服务,从
$_SERVER
阵列中获取用户的IP地址。然后,它将使用IP地址来设置cURL选项来读取地理位置数据。这将通过解析API的JSON响应来输出国家名称、代码和给定的IP。
下面的文件结构图显示了这个例子的简单性,文件的数量最少。
Request.php
文件有主要的函数,执行两个步骤以获得IP和地理位置数据。
index.php
文件调用服务来获取位置数据并将其填充到用户界面中。
###第1步:获取并验证当前的IP地址
这是主页代码,包含HTML代码,以确认用户的当前地理位置数据。它导入位置服务类,调用方法来获取和验证IP地址。一旦IP被验证并返回真,它就会请求地理定位数据。否则,它将在用户界面上显示错误信息。
index.php
require_once
'lib/Request.php'
;
$requestModel
=
new
Request
();
$ip
=
$requestModel
->
getIpAddress
();
$isValidIpAddress
=
$requestModel
->
isValidIpAddress
(
$ip
);
<TITLE>Get Geo Location by the IP address</TITLE>
<link href=
"assets/css/style.css"
type=
"text/css"
rel=
"stylesheet"
/>
</HEAD>
<div
class
="
txt
-
heading
">
Get
Geo
Location
by
the
IP
address
</
div
>
<?
php
if
($
isValidIpAddress
== "")
{
echo
"<div class='error'>Invalid IP address
$ip
</div>"
;
}
else
{
$geoLocationData
=
$requestModel
->
getLocation
(
$ip
);
print
"<PRE>"
;
print_r
(
$geoLocationData
);
<div id=
"location"
>
<div
class
="
geo
-
location
-
detail
">
<
div
class
="
row
">
<
div
class
="
form
-
label
">
Country
Name
: <?
php
echo
$
geoLocationData
['
country
'];?>
</
div
>
</
div
>
<
div
class
="
row
">
<
div
class
="
form
-
label
">
Country
Code
: <?
php
echo
$
geoLocationData
['
country_code
'];?>
</
div
>
</
div
>
<
div
class
="
row
">
<
div
class
="
form
-
label
">
Ip
Address
: <?
php
echo
$
geoLocationData
['
ip
'];?>
</
div
>
</
div
>
</
div
>
</
div
>
<?
php
}?>
</
BODY
>
</
HTML
>
第2步:准备API请求,通过PHP cURL获得地理位置信息
getIPAddress()
函数建立了一个if-else-if梯子的大部分方案,使用
$_SERVER
变量获得非空的IP地址。一旦IP被验证并返回真,
getLocation()
函数就会通过cURL请求ipwhois API。该API将返回一个JSON响应作为结果。这个例子对JSON响应进行解码,解析地理位置数据,从中获得国家的详细信息。
Request.php
class
Request
public
function
getIpAddress
(
)
$ipAddress
=
''
;
if
(!
empty
(
$_SERVER
[
'HTTP_CLIENT_IP'
]) &&
$this
->
isValidIpAddress
(
$_SERVER
[
'HTTP_CLIENT_IP'
])) {
$ipAddress
=
$_SERVER
[
'HTTP_CLIENT_IP'
];
}
else
if
(!
empty
(
$_SERVER
[
'HTTP_X_FORWARDED_FOR'
])) {
$ipAddressList
=
explode
(
','
,
$_SERVER
[
'HTTP_X_FORWARDED_FOR'
]);
foreach
(
$ipAddressList
as
$ip
) {
if
(
$this
->
isValidIpAddress
(
$ip
)) {
$ipAddress
=
$ip
;
break
;
}
else
if
(!
empty
(
$_SERVER
[
'HTTP_X_FORWARDED'
]) &&
$this
->
isValidIpAddress
(
$_SERVER
[
'HTTP_X_FORWARDED'
])) {
$ipAddress
=
$_SERVER
[
'HTTP_X_FORWARDED'
];
}
else
if
(!
empty
(
$_SERVER
[
'HTTP_X_CLUSTER_CLIENT_IP'
]) &&
$this
->
isValidIpAddress
(
$_SERVER
[
'HTTP_X_CLUSTER_CLIENT_IP'
])) {
$ipAddress
=
$_SERVER
[
'HTTP_X_CLUSTER_CLIENT_IP'
];
}
else
if
(!
empty
(
$_SERVER
[
'HTTP_FORWARDED_FOR'
]) &&
$this
->
isValidIpAddress
(
$_SERVER
[
'HTTP_FORWARDED_FOR'
])) {
$ipAddress
=
$_SERVER
[
'HTTP_FORWARDED_FOR'
];
}
else
if
(!
empty
(
$_SERVER
[
'HTTP_FORWARDED'
]) &&
$this
->
isValidIpAddress
(
$_SERVER
[
'HTTP_FORWARDED'
])) {
$ipAddress
=
$_SERVER
[
'HTTP_FORWARDED'
];
}
else
if
(!
empty
(
$_SERVER
[
'REMOTE_ADDR'
]) &&
$this
->
isValidIpAddress
(
$_SERVER
[
'REMOTE_ADDR'
])) {
$ipAddress
=
$_SERVER
[
'REMOTE_ADDR'
];
return
$ipAddress
;
public
function
isValidIpAddress
(
$ip
)
if
(
filter_var
(
$ip
, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) ===
false
) {
return
false
;
return
true
;
public
function
getLocation
(
$ip
)
$ch
=
curl_init
(
'http://ipwhois.app/json/'
.
$ip
);
curl_setopt
(
$ch
, CURLOPT_RETURNTRANSFER,
true
);
$json
=
curl_exec
(
$ch
);
curl_close
(
$ch
);
$ipWhoIsResponse
=
json_decode
(
$json
,
true
);
return
$ipWhoIsResponse
;
响应API调用的国家地理定位
下面的图片显示了带有国家名称和代码的位置数据。
如果IP地址不是一个有效的地址,那么代码将返回错误信息以确认用户。
替代的地理定位API
这些是一些提供服务的替代API,以程序化方式访问位置数据。
GeoPlugin服务允许从PHP、ASP、JavaScript等访问。
IPinfo库可以通过基于令牌的认证获得位置。
PHP支持整合PECL扩展的GeoIP2包,通过使用预定义的函数来获取位置数据。从IP地址或域名获取国家名称的代码是。
geoip_country_name_by_name ( $hostname );
获取地理位置的不同用途
为了通过IP地址获得用户的地理位置,有很多用途。
它提供了位置数据的准确性和可靠性,而用户可能输入错误的数据。
它提供了一个单一的入口点来获取数据,这些数据将在许多地方使用,如基于位置的货币转换器,运输计算或更多。
计算基于区域的访问统计。
它有助于通过对访问者进行本地化来切换多语言网站内容的语言。
在用户界面的地图层上绘制用户的位置。谷歌地图的JavaScript API提供地理定位服务,在地图上显示用户和设备的位置。
在整个文章中,你已经了解了如何获得你的网站的地理位置数据。此外,在这种情况下,地理定位数据可能会被用于几个原因,这可能包括。
个人化和限制对网站某些部分的访问。
基于地形的访问和交付的限制。
避免不诚实的行为。
掌握整个公司的信息流动情况。