📅  最后修改于: 2023-12-03 14:45:21.440000             🧑  作者: Mango
在 Web 开发中,获取客户端 IP 地址是一项很重要的技能。PHP 提供了多种方式来获取客户端的 IP 地址。
$_SERVER
全局变量获取客户端 IP$_SERVER
是一个包含了如 CGI 环境,版本,请求方法及头信息等数组。
// 获取客户端 IP 地址
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
这段代码是通过检查 HTTP_CLIENT_IP
,HTTP_X_FORWARDED_FOR
及 REMOTE_ADDR
变量来获取客户端的 IP 地址。
HTTP_CLIENT_IP
是客户端发出请求的 IP 地址。HTTP_X_FORWARDED_FOR
是一个代理服务器发送的 HTTP 头信息,它包含了客户端的真实 IP 地址。REMOTE_ADDR
是网络服务器上接收请求的计算机的 IP 地址。这段代码先检验是否存在 HTTP_CLIENT_IP
,如果存在,则返回 HTTP_CLIENT_IP
代表的 IP 地址。如果不存在,则检查是否存在 HTTP_X_FORWARDED_FOR
,如果存在,则返回 HTTP_X_FORWARDED_FOR
代表的 IP 地址。如果都不存在,则返回 REMOTE_ADDR
代表的 IP 地址。
注意:在使用 HTTP_X_FORWARDED_FOR
时,需要注意安全问题。因为 HTTP_X_FORWARDED_FOR
是通过一个代理服务器发送的,所以可能会被伪造。为了避免伪造,需要检查该地址是否在可信任的地址列表中。
getenv()
函数获取客户端 IPgetenv()
函数是用来获取操作系统和环境变量信息的函数。
// 获取客户端 IP 地址
$ip = getenv('HTTP_CLIENT_IP') ?:
getenv('HTTP_X_FORWARDED_FOR') ?:
getenv('REMOTE_ADDR') ?:
'unknown';
这段代码与第一种方法基本相同,只是使用了 getenv()
函数来获取客户端 IP 地址。
$_SERVER['REMOTE_ADDR']
获取客户端 IP$_SERVER['REMOTE_ADDR']
变量包含了客户端的 IP 地址。
// 获取客户端 IP 地址
$ip = $_SERVER['REMOTE_ADDR'];
这段代码直接获取了客户端的 IP 地址,但是在一些情况下,这个变量可能会被代理服务器篡改。
综上所述,第一种方式是最常用且最准确的方式,但需要注意安全问题。