📜  php 获取 ip 地址 - PHP (1)

📅  最后修改于: 2023-12-03 15:33:39.062000             🧑  作者: Mango

PHP 获取 IP 地址

在 PHP 中获取客户端的 IP 地址可以通过 $_SERVER 超全局变量来实现。下面分别介绍几种方法。

使用 REMOTE_ADDR 变量
/**
 * 获取客户端 IP 地址
 * @return string
 */
function get_client_ip_address() {
    $ip_address = '';
    if(isset($_SERVER['REMOTE_ADDR'])) {
        $ip_address = $_SERVER['REMOTE_ADDR'];
    }
    return $ip_address;
}

这种方式是最常用的方式,但是有一定的局限性。因为有些代理服务器的存在,这种方式无法获取真实的客户端 IP 地址,而是会获取到代理服务器的 IP 地址。因此,如果需要获取准确的客户端 IP 地址,需要使用其他方法。

使用 HTTP_X_FORWARDED_FOR 变量
/**
 * 获取客户端 IP 地址
 * @return string
 */
function get_client_ip_address() {
    $ip_address = '';
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip_list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $ip_address = trim(end($ip_list));
    } else if(isset($_SERVER['REMOTE_ADDR'])) {
        $ip_address = $_SERVER['REMOTE_ADDR'];
    }
    return $ip_address;
}

这种方式通过检查 HTTP 头中的 HTTP_X_FORWARDED_FOR 变量可以获取客户端的真实 IP 地址。这个变量通常是由代理服务器添加的,并且可以显示客户端的 IP 地址和代理服务器的 IP 地址。这种方式可以解决使用 HTTP_X_FORWARDED_FOR 变量无法解决的代理服务器的问题,但是在某些情况下,这种方式仍然无法获得准确的 IP 地址。

使用 REMOTE_HOST 变量
/**
 * 获取客户端 IP 地址
 * @return string
 */
function get_client_ip_address() {
    $ip_address = '';
    if(isset($_SERVER['REMOTE_HOST'])) {
        $ip_address = $_SERVER['REMOTE_HOST'];
    } else if(isset($_SERVER['REMOTE_ADDR'])) {
        $ip_address = $_SERVER['REMOTE_ADDR'];
    }
    return $ip_address;
}

这种方式使用 REMOTE_HOST 变量来获取客户端的 IP 地址。这个变量通常是由 Web 服务器设置,但是在某些情况下,它可能为空。

在使用这些方法获取 IP 地址时,需要注意以下几点:

  • 这些方法都不能保证获取到的 IP 地址一定是准确的,因为客户端的 IP 地址可能被代理服务器篡改。
  • 只有在客户端提交 HTTP 请求时才能获取到 IP 地址,如果客户端未提交任何请求,则无法获取 IP 地址。
  • 通过使用不同的方法可以获取到不同的 IP 地址,需要根据实际情况选择最适合的方式。
  • 在进行安全验证时,需要注意客户端 IP 地址可能被修改的问题,不应该使用 IP 地址作为唯一的验证依据。