【问题标题】:php, get client ip addressphp,获取客户端IP地址
【发布时间】:2013-07-07 17:29:34
【问题描述】:

我在服务器的同一目录中有两个 php 文件 (http://www.xxxx.com/php/),

1) write_json.php

$address['http_client'] = $_SERVER['HTTP_CLIENT_IP']; $address['http_x_forwarded_for'] = $_SERVER['HTTP_X_FORWARDED_FOR']; $address['http_x_forwarded'] = $_SERVER['HTTP_X_FORWARDED']; $address['http_forwarded_for'] = $_SERVER['HTTP_FORWARDED_FOR']; $address['http_forwarded'] = $_SERVER['HTTP_FORWARDED']; $address['remote_addr'] = $_SERVER['REMOTE_ADDR']; header('Content-Type: application/json'); 回声 json_encode($address);

2) get_ip.php

$json_url = $_SERVER['SERVER_NAME'] 。 '/php/write_json.php'; $json_string = ''; $ch = curl_init($json_url); $options = 数组(CURLOPT_RETURNTRANSFER => 真, CURLOPT_HTTPHEADER => array('Content-type: application/json'), CURLOPT_POSTFIELDS => $json_string); curl_setopt_array($ch, $options); $json_string = curl_exec($ch); 回声 $json_string;

get_ip.php    调用  write_json.php

如果我们假设客户端 IP 是:76.2.35.46,而服务器 IP 是:80.59.3.23
当我在客户端浏览器上调用 http://www.xxxx.com/php/get_ip.php

它向我显示服务器 IP,而不是像这样的客户端 IP:

{ http_client:空, http_x_forwarded_for:空, http_x_forwarded:空, http_forwarded_for:空, http_forwarded:空, 远程地址:“80.59.3.23” }

如何获取客户端 IP 而不是服务器 IP?

【问题讨论】:

    标签: php client ip-address


    【解决方案1】:

    您正在通过 curl 从服务器调用 write_json ......也就是说,服务器实际上正在请求 write_json 文件,因此 write_json 看到请求来自服务器。为什么不直接使用 include 而不是 curl 调用?

    【讨论】:

      【解决方案2】:

      这种方式是不可能的。您需要先获取客户端 ip,然后通过 curl 将其作为发布数据发送到服务器。

      【讨论】:

        【解决方案3】:

        尝试获取客户端 IP 使用以下将返回客户端 IP 的函数

        // Function to get the client IP address
        function get_client_ip() {
            $ipaddress = '';
            if (getenv('HTTP_CLIENT_IP'))
                $ipaddress = getenv('HTTP_CLIENT_IP');
           else if(getenv('HTTP_X_FORWARDED_FOR'))
                $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
           else if(getenv('HTTP_X_FORWARDED'))
                $ipaddress = getenv('HTTP_X_FORWARDED');
           else if(getenv('HTTP_FORWARDED_FOR'))
               $ipaddress = getenv('HTTP_FORWARDED_FOR');
           else if(getenv('HTTP_FORWARDED'))
               $ipaddress = getenv('HTTP_FORWARDED');
           else if(getenv('REMOTE_ADDR'))
               $ipaddress = getenv('REMOTE_ADDR');
           else
               $ipaddress = 'UNKNOWN';
           return $ipaddress;
        }
        

        在变量中获取 IP 后发送

        【讨论】:

          猜你喜欢
          • 2019-01-14
          • 2018-07-27
          • 2011-05-26
          • 2019-11-13
          • 1970-01-01
          • 2021-10-22
          相关资源
          最近更新 更多