使用PHP获取客户端IP地址

18 浏览
0 Comments

使用PHP获取客户端IP地址

这个问题的解答已经在这里了:

如何在PHP中获取客户端IP地址

我想要获取使用我的网站的客户端IP地址。我正在使用PHP的$_SERVER全局变量:

$_SERVER['REMOTE_ADDR'];

但是我发现使用它不能得到正确的IP地址。我获取我的IP地址并发现它与我的IP地址不同,我还可以在一些网站上看到我的IP地址,如:

http://whatismyipaddress.com/

我将这个网站给我的PHP函数显示的IP地址粘贴到这个网站上,但是这个网站没有显示结果。这个问题是如何产生的,我如何获取客户端的IP地址呢?

admin 更改状态以发布 2023年5月25日
0
0 Comments

在PHP 5.3或以上的版本中,您可以像这样获取它:

$ip = getenv('HTTP_CLIENT_IP')?:
getenv('HTTP_X_FORWARDED_FOR')?:
getenv('HTTP_X_FORWARDED')?:
getenv('HTTP_FORWARDED_FOR')?:
getenv('HTTP_FORWARDED')?:
getenv('REMOTE_ADDR');

0
0 Comments

获取访问者/客户端IP地址最简单的方法是使用$_SERVER['REMOTE_ADDR']$_SERVER['REMOTE_HOST']变量。

然而,有时这样不能返回正确的访问者IP地址,因此我们可以使用其他一些服务器变量来获取IP地址。

下面这两个函数只在值如何获取以及从哪里获取方面有所不同,本质上是等价的。

在PHP中使用getenv()获取环境变量的值。

// Function to get the client IP address
function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
       $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

$_SERVER是一个包含由Web服务器创建的服务器变量的数组。

// Function to get the client IP address
function get_client_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

0