【问题标题】:$_SERVER['REMOTE_ADDR'] is not giving ip address in wordpress plugin$_SERVER['REMOTE_ADDR'] 没有在 wordpress 插件中给出 IP 地址
【发布时间】:2016-05-12 00:30:38
【问题描述】:

我正在为 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地址的原因是什么?

还有其他选择吗?

【问题讨论】:

    标签: php wordpress woocommerce server


    【解决方案1】:

    你可以使用这个功能:

    // 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;
    }
    

    【讨论】:

    • 这给了我正确的 ip,但是我的问题仍然没有解决。付款方式适用于 iframe,它让我知道我的服务器的 ip 未授权该 ip。但是,我在我的问题中没有提到这一点,所以如果在解决我的情况后没有更好的答案,我会接受你的回答。
    • 这种方法允许注射,见this answer
    【解决方案2】:

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

    REMOTE_ADDR 只获取“最近”的请求 IP。如果两者之间还有其他 IP(例如来自网络 LAN 路由器之类的代理),则不会返回用户的 IP - 我猜这就是您所追求的。

    虽然上述第一响应者的功能应该可以工作(注意$_SERVER 超全局键的其他参考),但这只是 OP 问题的一部分。我相信的原因是这些代理是否/何时实际在每个请求中发送这些替代标头。

    【讨论】:

      猜你喜欢
      • 2015-06-19
      • 1970-01-01
      • 2017-04-28
      • 2012-09-23
      • 2011-05-14
      • 2012-09-16
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      相关资源
      最近更新 更多