PHP - 获取公共 IP

10 浏览
0 Comments

PHP - 获取公共 IP

我在我的PHP页面上有一个表单。用户填写他的凭据和信息,并按下发送按钮。我通过电子邮件收到他的问题,并可以回答他。

但我还想在电子邮件中添加该人的公共IP地址,这可能吗?

非常感谢!

0
0 Comments

问题的出现原因:使用$_SERVER['REMOTE_ADDR']可以获取公共IP,但如果确保获取的是正确的IP而不是代理IP,则需要使用其他方法。

解决方法:可以使用get_real_ip()函数来获取真实的IP地址。该函数通过判断$_SERVER中的不同HTTP头部字段来获取真实IP,包括HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR、HTTP_X_FORWARDED、HTTP_FORWARDED_FOR和HTTP_FORWARDED。如果这些字段都不存在,则返回$_SERVER['REMOTE_ADDR']。

值得注意的是,$_SERVER["HTTP_*"]变量都可以很容易地进行欺骗,因此可以将$_SERVER['REMOTE_ADDR']和其他可用的HTTP头部字段一起存储以确保获取真实IP。

以下是获取真实IP的PHP代码:

function get_real_ip()
{
    if (isset($_SERVER["HTTP_CLIENT_IP"]))
    {
        return $_SERVER["HTTP_CLIENT_IP"];
    }
    elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
    {
        return $_SERVER["HTTP_X_FORWARDED_FOR"];
    }
    elseif (isset($_SERVER["HTTP_X_FORWARDED"]))
    {
        return $_SERVER["HTTP_X_FORWARDED"];
    }
    elseif (isset($_SERVER["HTTP_FORWARDED_FOR"]))
    {
        return $_SERVER["HTTP_FORWARDED_FOR"];
    }
    elseif (isset($_SERVER["HTTP_FORWARDED"]))
    {
        return $_SERVER["HTTP_FORWARDED"];
    }
    else
    {
        return $_SERVER["REMOTE_ADDR"];
    }
}

然而,需要注意的是,这些代码容易被滥用,因此请谨慎使用。

0
0 Comments

在PHP中获取公共IP地址的方法有多种,但并不一定可靠。可以使用$_SERVER["REMOTE_ADDR"]来获取,但这种方法并不完全可信。因为$_SERVER["REMOTE_ADDR"]可能返回代理服务器的地址,而不是远程用户的地址。例如,如果使用了nginx作为apache的代理服务器,那么apache接收到的$_SERVER["REMOTE_ADDR"]就是nginx服务器的地址。

要获取真正的公共IP地址,可以考虑使用其他方法。例如,可以使用第三方服务来获取公共IP地址。下面是一个示例代码,使用了ipify.org这个服务来获取公共IP地址:

$public_ip = file_get_contents("https://api.ipify.org");
echo $public_ip;

使用这种方法,可以确保获取的是真正的公共IP地址,而不是代理服务器的地址。

总结一下,使用$_SERVER["REMOTE_ADDR"]可以获取到公共IP地址,但不一定可靠。为了确保获取到真正的公共IP地址,可以考虑使用第三方服务来获取。以上示例代码使用了ipify.org这个服务来获取公共IP地址。

0
0 Comments

尝试使用$_SERVER['REMOTE_ADDR']获取用户的IP地址。

http://php.net/manual/en/reserved.variables.server.php

在我的本地站点上,我得到的是127.0.0.1。我不能在我的本地站点上获取我的公共IP地址。

问题出现的原因:在本地站点上使用$_SERVER['REMOTE_ADDR']获取的是本地IP地址(如127.0.0.1),而不是公共IP地址。

解决方法:通过使用第三方服务来获取公共IP地址。

以下是一个示例代码,使用了ipify服务来获取公共IP地址:

$ip = file_get_contents("https://api.ipify.org");
echo $ip;

这段代码使用了file_get_contents函数来向ipify服务发出请求,并将返回的公共IP地址存储在$ip变量中,最后通过echo语句将其输出。

使用该方法可以解决在本地站点上无法获取公共IP地址的问题。

0