hyperf2.1框架中获取客户端ip地址的方法

2023-06-01 00:00:00 客户端 框架 获取
/**
* 获取客户端ip地址
* @return ip
*/
public function ip(){
   $res = $this->request->getServerParams();
   if(isset($res['http_client_ip'])){
       return $res['http_client_ip'];
   }elseif(isset($res['http_x_real_ip'])){
       return $res['http_x_real_ip'];
   }elseif(isset($res['http_x_forwarded_for'])){
       //部分CDN会获取多层代理IP,所以转成数组取第一个值
       $arr = explode(',',$res['http_x_forwarded_for']);
       return $arr[0];
   }else{
       return $res['remote_addr'];
   }
}
//获取真实ip #有时候根据代理环境,上面的函数获取不到就用这个
function reaip(){
   $headers = $this->request->getHeaders();

   if(isset($headers['x-forwarded-for'][0]) && !empty($headers['x-forwarded-for'][0])) {
       return $headers['x-forwarded-for'][0];
   } elseif (isset($headers['x-real-ip'][0]) && !empty($headers['x-real-ip'][0])) {
       return $headers['x-real-ip'][0];
   }

   $serverParams = $this->request->getServerParams();

   return $serverParams['remote_addr'] ?? '';
}


相关文章