php - 使用 PHP 获取客户端 IP 地址

标签 php ip-address

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

$_SERVER['REMOTE_ADDR'];

但我发现它无法使用它提供正确的 IP 地址。我得到了我的 IP 地址,发现它与我的 IP 地址不同,我还可以在某些网站上看到我的 IP 地址,例如:

http://whatismyipaddress.com/

我粘贴了提供我的 PHP 功能的 IP 地址,但这个网站没有显示任何结果。这个问题是怎么来的,如何获取客户端的IP地址?

最佳答案

获取访问者/客户的IP address 的最简单方法正在使用 $_SERVER['REMOTE_ADDR']$_SERVER['REMOTE_HOST'] 变量。

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

以下两个函数是等价的,不同之处仅在于检索值的方式和来源。

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

// 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;
}

关于php - 使用 PHP 获取客户端 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15699101/

相关文章:

php - 关闭弹窗并刷新父页面

java - 当 MySQL 中有任何更新时在 android 中获取通知

virtualbox - Synergy 连接超时(Mac 客户端,Windows 10 服务器)

c# - 如何确定本地主机的 IPv4 地址?

php - 我怎样才能得到客户端的IP地址?

php - 如何使用 mysql db & slim 3 PHP 框架在同一个函数中执行 2 个查询

php - 禁用 jquery datepicker 日历天,基于 ajax php mysql 表

php - Guzzle 指挥所数据

c - 如何找到默认网关的地址和面向它的本地地址?

ios - 如何与Wifi Camera iOS连接