在 PHP 中获取用户 IP 地址

Subodh Poudel 2023年1月30日 2021年4月29日
PHP
  1. 在 PHP 中使用 $_SERVER['REMOTE_ADDR'] 查找用户的 IP 地址
  2. 使用 $_SERVER['REMOTE_ADDR']$_SERVER['HTTP_CLIENT_IP']$_SERVER['HTTP_X_FORWARDED_FOR'] 查找用户的 IP 地址
  3. 使用三元运算符和 isset() 函数查找用户的 IP 地址
在 PHP 中获取用户 IP 地址

我们将介绍一种使用 $_SERVER 超级全局变量(唯一的数组元素是 REMOTE_ADDR)从 PHP 服务器中访问用户 IP 地址的方法。它用作 $_SERVER['REMOTE_ADDR']

我们将演示使用条件表达式检查用户 IP 地址是来自共享 Internet,代理还是真实 IP 地址,这是使用条件表达式访问 PHP 用户 IP 地址的另一种方法。该方法使用数组元素,例如 HTTP_CLIENT_IPHTTP_X_FORWARDED_FORREMOTE_ADDR

我们将向你展示一种使用三元运算符和 isset() 函数在 PHP 中获取用户 IP 地址的简便方法。此方法还使用超全局变量 $_SERVER 中的数组元素,例如 HTTP_CLIENT_IPHTTP_X_FORWARDED_FORREMOTE_ADDR

在 PHP 中使用 $_SERVER['REMOTE_ADDR'] 查找用户的 IP 地址

我们可以使用 $_SERVER['REMOTE_ADDR'] 表达式查找用户访问当前页面的 IP 地址。$_SERVER 是 PHP 中的超级全局变量,它使用各种数组元素作为参数。我们使用 REMOTE_ADDR 作为 $_SERVER 变量中的数组元素来访问客户端的实际 IP 地址。注意,$_SERVER['REMOTE_ADDR'] 并不总是在所有情况下都提供正确的客户端 IP 地址。我们将在下面讨论其他情况。确保服务器 API(SAPI)的配置正确,以便上面的表达式将返回连接的真实 IP。

在下面的示例中,localhost 用作服务器。因此,它返回回送 IP 地址。要了解回送地址,请参考 here。假设以下 PHP 脚本的 URL 是 http://localhost/index.php。它将本地计算机的 IP 地址输出为::1::1localhost 的 IPv6 表示形式。

例如,将 $_SERVER['REMOTE_ADDR'] 分配给变量 ip_addr。然后,使用 echo 打印变量。

示例代码:

# php 7.x
<?php
$ip_add = $_SERVER['REMOTE_ADDR'];
echo "The user's IP address is - ".$ip_add;
?>

输出:

The user's IP address is - ::1

使用 $_SERVER['REMOTE_ADDR']$_SERVER['HTTP_CLIENT_IP']$_SERVER['HTTP_X_FORWARDED_FOR'] 查找用户的 IP 地址

我们可以使用超全局变量 $_SERVER 的数组元素,例如 $_SERVER['REMOTE_ADDR']$_SERVER['HTTP_CLIENT_IP']$_SERVER['HTTP_X_FORWARDED_FOR'] 来查找 IP 地址 PHP 中的用户。使用 $_SERVER['REMOTE_ADDR'] 查找用户的真实 IP 地址。当用户从共享 Internet 访问页面时,使用 $_SERVER['HTTP_CLIENT_IP'] 查找 IP 地址。当用户使用代理访问网页时,使用 $_SERVER['HTTP_X_FORWARDED_FOR'] 查找 IP 地址。请注意,诸如 HTTP_X_FORWARDED_FORHTTP_CLIENT_IP 之类的标头可能是伪造的,因为任何人都可以设置。有时,它们可能不代表客户端的真实 IP 地址。

例如,使用 empty() 函数检查 $_SERVER['HTTP_CLIENT_IP'] 是否包含某些内容。如果包含,则在 $ip 变量中分配 vale 并打印 i。
再次,相应地检查 $_SERVER['HTTP_X_FORWARDED_FOR'],并分配该值并打印(如果存在)。在 $_SERVER['REMOTE_ADDR'] 上执行类似的操作。

下例 $_SERVER['REMOTE_ADDR'] 返回 IP 地址,因为用户未使用任何代理或共享的 Internet 连接。查看 PHP 手册,以了解有关 $_SERVER 数组的更多信息。

示例代码:

#php 7.x
<?php if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    echo $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    echo $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    echo $ip = $_SERVER['REMOTE_ADDR'];
}
?> 

输出:

 ::1

使用三元运算符和 isset() 函数查找用户的 IP 地址

我们可以使用简写方法使用三元运算符在 PHP 中查找用户的 IP 地址。在此方法中,isset() 方法检查数组是否包含指定的元素或头文件。

例如,使用 isset() 函数检查数组是否包含 HTTP_CLIENT_IP。如果条件为真,则设置 HTTP_CLIENT_IP。然后,如果条件失败,则使用 isset() 函数检查数组是否包含 HTTP_X_FORWARDED_FOR。同样,如果条件为真,则设置 HTTP_X_FORWARDED_FOR,并在条件失败时设置 REMOTE_ADDR

在下面的示例中,客户端未使用代理或共享 Internet。因此,将执行 $_SERVER['REMOTE_ADDR']。请查看 MSDN Web 文档以了解有关三元运算符。

示例代码:

#php 7.x
<?php
$ip = isset($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
echo "The user IP Address is - ". $ip;
?>

输出:

The user IP Address is - ::1
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn