php如何获取请求接口资源的请求者的IP地址

php如何获取请求接口资源的请求者的IP地址,第1张

/

     获取客户端IP地址

     @param integer $type

     @return mixed

    /

   function getclientip() {

       static $realip = NULL;

        

       if($realip !== NULL){

           return $realip;

       }

       if(isset($_SERVER)){

           if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ //但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。

               $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);

               / 取X-Forwarded-For中第一个非unknown的有效IP字符串 /

               foreach ($arr AS $ip){

                   $ip = trim($ip);

                   if ($ip != 'unknown'){

                       $realip = $ip;

                       break;

                   }

               }

           }elseif(isset($_SERVER['HTTP_CLIENT_IP'])){//HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是"超级匿名代理",则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。

               $realip = $_SERVER['HTTP_CLIENT_IP'];

           }else{

               if (isset($_SERVER['REMOTE_ADDR'])){ //正在浏览当前页面用户的 IP 地址

                   $realip = $_SERVER['REMOTE_ADDR'];

               }else{

                   $realip = '0000';

               }

           }

       }else{

           //getenv环境变量的值

           if (getenv('HTTP_X_FORWARDED_FOR')){//但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址

               $realip = getenv('HTTP_X_FORWARDED_FOR');

           }elseif (getenv('HTTP_CLIENT_IP')){ //获取客户端IP

               $realip = getenv('HTTP_CLIENT_IP');

           }else{

               $realip = getenv('REMOTE_ADDR');  //正在浏览当前页面用户的 IP 地址

           }

       }

       preg_match("/[\d\]{7,15}/", $realip, $onlineip);

       $realip = !empty($onlineip[0])  $onlineip[0] : '0000';

       return $realip;

   }

理论上不可能获得真实的客户IP地址,只能获得最后一次路由器、或者代理服务器的IP地址。典型的情况是对方也在局域网、或者防火墙的后面,我们是不可能获得他真实的IP地址的,其实获取来也没有,一般是19216812这样的私有地址,甚至很可能所有的客户机都是这个网段。

这个跟你的路由设置和访问方式有关。

假设你的服务端在1010501,公网IP都是8888。

假设你的客户端在 101050100-199,出口公网IP是4444

如果你的客户端以公网的形式访问,如http://8888/ipphp,则服务端获得IP都是4444。

反之以内网的形式访问,如http://1010501/ipphp,获得的IP就是1010501XX。

解决的办法,要么就是使用内网地址访问,要么使用设置一下路由,指定101050100-199访问的话,不走公网,走10网段。

$user_IP = $_SERVER["REMOTE_ADDR"];//获取访问者IP

$file_name=date('Y-m-d')'txt'//以当前的日期建立txt文件

$file=fopen($file_name,"a+");//如果存在该文件就打开,如果不存在就创建

fwrite($file,$user_IP'--'date('Y-m-d H:i:s'));//将访问者IP及当前时刻写到文件最后

fclose($file);//关闭文件

//个人觉得txt文件不会很大所以一般无需一天一删除,因为在txt里删除一些行比起数据库要麻烦一些。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » php如何获取请求接口资源的请求者的IP地址

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情