我怎样才能在PHP Web服务获得客户端的IP地址? [重复](How can I get th

2019-07-18 08:12发布

这个问题已经在这里有一个答案:

  • 如何在PHP中获取客户端IP地址 26个回答

我公司开发的PHP Web服务。 我想记录的WS客户的所有传入连接,这在消费这个Web服务。 我怎样才能获得客户端的IP地址? 的价值

 $_SERVER['HTTP_CLIENT_IP'] 
似乎总是空的。

Answer 1:

这应该是你想要什么:

$_SERVER['REMOTE_ADDR']

IP地址从用户正在浏览当前页面。

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



Answer 2:

事实上,我会建议使用此功能覆盖所有客户群,如使用代理服务器,网络共享等人的:

function getUserIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //if from shared
    {
        return $_SERVER['HTTP_CLIENT_IP'];
    }
    else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //if from a proxy
    {
        return $_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
        return $_SERVER['REMOTE_ADDR'];
    }
}


Answer 3:

确保不信任从客户端发送的数据。 $_SERVER['REMOTE_ADDR']包含连接方的真实IP地址。 也就是说,你可以找到最可靠的价值。

然而,他们可以在后面这种情况下,代理可能已经设置了代理服务器$_SERVER['HTTP_X_FORWARDED_FOR']但这个值是很容易伪造。 它可以通过一个人没有任何值用户想要的代理设置,或IP地址可以是从背后的代理局域网内部IP。

这意味着,如果你要节省$_SERVER['HTTP_X_FORWARDED_FOR']请确保您也节省了$_SERVER['REMOTE_ADDR']值,例如,通过在数据库中保存在不同的领域值。

如果你要的IP保存到数据库作为一个字符串,请确保您有空间至少45个字符 。 IPv6的是这里留下来,这些地址是比旧的IPv4地址大。



Answer 4:

功能getUserIpAddr()和getRealIpAddr()是不可靠的

唯一可靠的IP是$ip = $_SERVER["REMOTE_ADDR"]; 否则任何人都可以伪造通过发送例如CLIENT_IP头他的IP地址。

这个Firefox附加组件可以帮助您发送自定义页眉。 发送CLIENT_IP = XXXX头在运行任何此页面上的功能的服务器,将意味着客户可以选择他们想要的任何IP ...



Answer 5:

您是否使用某种框架,为您的Web服务? 我看到一些框架(例如Agavi的 ),因为他们想enfore表示您从一个框架服务使用验证值,其故意删除所有的$服务器数据。



Answer 6:

如果不这样做的工作,我不知道该怎么做..

    function getClientIP() {
        if (isset($_SERVER)) {

           if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
               return $_SERVER["HTTP_X_FORWARDED_FOR"];

           if (isset($_SERVER["HTTP_CLIENT_IP"]))
               return $_SERVER["HTTP_CLIENT_IP"];

           return $_SERVER["REMOTE_ADDR"];
        }

        if (getenv('HTTP_X_FORWARDED_FOR'))
           return getenv('HTTP_X_FORWARDED_FOR');

        if (getenv('HTTP_CLIENT_IP'))
           return getenv('HTTP_CLIENT_IP');

    return getenv('REMOTE_ADDR');
}


Answer 7:

我的首选功能:

    public static function get_remote_ip() {
        if(isset($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR'])) {
            return $_SERVER['REMOTE_ADDR'];
        } 

        if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            return $_SERVER['HTTP_X_FORWARDED_FOR'];
        }

        return null;
    }


Answer 8:

您可以尝试

<?php
var_dump($_SERVER);

查看所有瓦尔。 但是,实际上也取决于你的脚本在运行的后端。 那是Apache的?



Answer 9:

<?php 
 $ip=$_SERVER['REMOTE_ADDR'];
 echo "Your IP Address is $ip"; 
 ?> 

并插入到数据库中只使用$ IP



Answer 10:

<?php
function getIP() {
$ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else
$ip = "UNKNOWN";
return $ip;

}

//-----------------------------------------------

//Usage:


$client_ip=getIP();
echo "Your IP :".$client_ip;
?>


文章来源: How can I get the client's IP address in a PHP webservice? [duplicate]