$ _SERVER ['REMOTE_ADDR']没有在wordpress插件中提供ip地址

时间:2016-02-03 00:28:45

标签: php wordpress woocommerce server

我正在为Wordpress构建一个插件,以便在woocommerce中创建新的支付网关。在这个插件中,我需要将客户端的ip地址发送给api。

好吧,当我在插件php文件中使用时,$ _SERVER ['REMOTE_ADDR']没有给我正确的IP地址。 WC_Geolocation :: get_ip_address()也不起作用,如果我在插件文件中使用它们,它们都给我服务器ip。 如果我在footer.php中使用它们,它会给我正确的IP地址。所以,它一定不是关于服务器配置,实际上,当我尝试在收据页面显示客户端ip时,在收据部分,它们都给我服务器ip,而他们给我正确的ip页脚。

使用$ _SERVER ['REMOTE_ADDR']时显示服务器IP地址的原因是什么?

还有其他选择吗?

2 个答案:

答案 0 :(得分:2)

您可以使用此功能:

// Function to get the client IP address
static function get_client_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ipaddress .= $_SERVER['HTTP_CLIENT_IP'] . ' - ';
    }
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipaddress .= $_SERVER['HTTP_X_FORWARDED_FOR']. ' - ';
    }
    if(isset($_SERVER['HTTP_X_FORWARDED'])) {
        $ipaddress .= $_SERVER['HTTP_X_FORWARDED']. ' - ';
    }
    if(isset($_SERVER['HTTP_FORWARDED_FOR'])) {
        $ipaddress .= $_SERVER['HTTP_FORWARDED_FOR']. ' - ';
    }
    if(isset($_SERVER['HTTP_FORWARDED'])) {
        $ipaddress .= $_SERVER['HTTP_FORWARDED']. ' - ';
    }
    if(isset($_SERVER['REMOTE_ADDR'])) {
        $ipaddress .= $_SERVER['REMOTE_ADDR']. ' - ';
    }

    if($ipaddress == '') {
        $ipaddress = 'UNKNOWN';
    }

    return $ipaddress;
}

答案 1 :(得分:1)

  

使用$ _SERVER [' REMOTE_ADDR']时显示服务器IP地址的原因是什么?

REMOTE_ADDR只能选择最近的"请求IP。如果中间还有其他IP(例如来自代理,例如网络局域网的路由器),则不会返回用户的IP - 我猜测的就是你之后的

虽然上面的第一个响应者的功能应该起作用(注意另一个响应$_SERVER超全球键),这只是OP问题的一部分。我相信的原因是这些代理是否/何时实际上为每个请求发送这些备用标头。

相关问题