【发布时间】:2015-11-17 12:01:52
【问题描述】:
我编写此代码是为了在我的网站上获取用户 ip,目前我正在我的本地主机中检查它,但它返回类似于 ::1 的内容。 我正在使用 xampp 包,我的代码是
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
我会得到我的 ip 127.0.0.1,因为我在本地主机上,但它返回 ::1。
【问题讨论】:
我编写此代码是为了在我的网站上获取用户 ip,目前我正在我的本地主机中检查它,但它返回类似于 ::1 的内容。 我正在使用 xampp 包,我的代码是
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
我会得到我的 ip 127.0.0.1,因为我在本地主机上,但它返回 ::1。
【问题讨论】:
根据这个answer SO
Localhost 始终转换为 IPv4 中的环回 IP 地址 127.0.0.1,或 IPv6 中的 ::1
所以得到::1 实际上是预期的行为。
如果您想将::1 转换为与127.0.0.1 等效的IPv4,可以使用PHP 的inet_ntop() 函数。请参阅此question 了解更多信息。
$packed = chr(127) . chr(0) . chr(0) . chr(1);
$expanded = inet_ntop($packed);
/* Outputs: 127.0.0.1 */
echo $expanded;
$packed = str_repeat(chr(0), 15) . chr(1);
$expanded = inet_ntop($packed);
/* Outputs: ::1 */
echo $expanded;
【讨论】:
IP 地址“::1”是新的 Internet 寻址系统。如果您正在编写代码来处理 IP 地址,那么会越来越多地遇到这些。
【讨论】:
您可以将 dig 与 shell_exec 一起使用
$ip = trim(shell_exec("dig +short myip.opendns.com @resolver1.opendns.com"));
echo ("My public IP: ".$ip);
【讨论】: