📜  PHP |获取客户端 ip - PHP (1)

📅  最后修改于: 2023-12-03 14:45:21.440000             🧑  作者: Mango

PHP | 获取客户端 IP

在 Web 开发中,获取客户端 IP 地址是一项很重要的技能。PHP 提供了多种方式来获取客户端的 IP 地址。

1. 通过 $_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_IPHTTP_X_FORWARDED_FORREMOTE_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 是通过一个代理服务器发送的,所以可能会被伪造。为了避免伪造,需要检查该地址是否在可信任的地址列表中。

2. 通过 getenv() 函数获取客户端 IP

getenv() 函数是用来获取操作系统和环境变量信息的函数。

// 获取客户端 IP 地址
$ip = getenv('HTTP_CLIENT_IP') ?: 
      getenv('HTTP_X_FORWARDED_FOR') ?: 
      getenv('REMOTE_ADDR') ?: 
      'unknown';

这段代码与第一种方法基本相同,只是使用了 getenv() 函数来获取客户端 IP 地址。

3. 通过 $_SERVER['REMOTE_ADDR'] 获取客户端 IP

$_SERVER['REMOTE_ADDR'] 变量包含了客户端的 IP 地址。

// 获取客户端 IP 地址
$ip = $_SERVER['REMOTE_ADDR'];

这段代码直接获取了客户端的 IP 地址,但是在一些情况下,这个变量可能会被代理服务器篡改。

综上所述,第一种方式是最常用且最准确的方式,但需要注意安全问题。