ccc0120 发表于 2021-9-23 08:06

php获取和传递ip信息

本地群晖搭建的web自己玩的平台,想实现记录访问者的ip,目前采用了百度云(实际是ip138)的查ip地址信息的接口,但是如何把访问群晖内web的客户端ip传递给百度云接口呢?网络搜索了好多都显示的是我家里路由器的局域网地址,而不是访问者的ip,请教各位大神了,谢谢。
附百度云用的接口:
<?php
    $headers = array();
    array_push($headers, "X-Bce-Signature:AppCode/" . "您的AppCode");
    array_push($headers, "Content-Type".":"."application/json;charset=UTF-8");
    $url = "http://gwgp-uhhqextob4p.n.bdcloudapi.com/query/?ip=.$ip&datatype=json&callback=callback&";
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_FAILONERROR, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, true);
    //var_dump(curl_exec($curl));
?>

网络上找到获取ip的代码诸如:
function getIP(){
        global $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 = "Unknow";
        return $ip;
}
好几个都不行,显示的是本地路由地址。

brightwill 发表于 2021-9-23 11:38

ip不做全局变量试试   
<?php
    $headers = array();
    array_push($headers, "X-Bce-Signature:AppCode/" . "您的AppCode");
    array_push($headers, "Content-Type".":"."application/json;charset=UTF-8");
    $ip = getIP();
    $url = "http://gwgp-uhhqextob4p.n.bdcloudapi.com/query/?ip=.$ip&datatype=json&callback=callback&";
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_FAILONERROR, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HEADER, true);
    //var_dump(curl_exec($curl));
?>

//网络上找到获取ip的代码诸如:
function getIP(){
      //global $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 = "Unknow";
      return $ip;
}

Teachers 发表于 2021-9-23 15:31

打印一下 $_SERVER 看看

ccc0120 发表于 2021-9-23 20:11

brightwill 发表于 2021-9-23 11:38
ip不做全局变量试试   




还是不行

ccc0120 发表于 2021-9-23 20:13

@Teachers,谢谢,麻烦看看server的信息

ccc0120 发表于 2021-9-23 20:14

Teachers 发表于 2021-9-23 15:31
打印一下 $_SERVER 看看

图片中***.kooldns.cn是内网穿透访问群晖web站点的域名

brightwill 发表于 2021-9-24 09:04

ccc0120 发表于 2021-9-23 20:11
还是不行

是不是做了中转代{过}{滤}理什么的了,不然是可以正常获取到客户ip的

ccc0120 发表于 2021-9-24 09:28

brightwill 发表于 2021-9-24 09:04
是不是做了中转代{过}{滤}理什么的了,不然是可以正常获取到客户ip的

没有啊,就是群晖上建立的web,由于没有公网ip,通过ddnsto的内网穿透访问的么
页: [1]
查看完整版本: php获取和传递ip信息