在 PHP 中获取用户 IP 地址
-
在 PHP 中使用
$_SERVER['REMOTE_ADDR']
查找用户的 IP 地址 -
使用
$_SERVER['REMOTE_ADDR']
、$_SERVER['HTTP_CLIENT_IP']
和$_SERVER['HTTP_X_FORWARDED_FOR']
查找用户的 IP 地址 -
使用三元运算符和
isset()
函数查找用户的 IP 地址
我们将介绍一种使用 $_SERVER
超级全局变量(唯一的数组元素是 REMOTE_ADDR
)从 PHP 服务器中访问用户 IP 地址的方法。它用作 $_SERVER['REMOTE_ADDR']
。
我们将演示使用条件表达式检查用户 IP 地址是来自共享 Internet,代理还是真实 IP 地址,这是使用条件表达式访问 PHP 用户 IP 地址的另一种方法。该方法使用数组元素,例如 HTTP_CLIENT_IP
,HTTP_X_FORWARDED_FOR
和 REMOTE_ADDR
。
我们将向你展示一种使用三元运算符和 isset()
函数在 PHP 中获取用户 IP 地址的简便方法。此方法还使用超全局变量 $_SERVER
中的数组元素,例如 HTTP_CLIENT_IP
,HTTP_X_FORWARDED_FOR
和 REMOTE_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
。::1
是 localhost
的 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_FOR
和 HTTP_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 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