PHP获取用户端IP地址

来源:IT星空
访问量:34
发布日期:2023-07-24

通用PHP获取IP方法:

//获取IP地址
function getcustomIP() {
	if (isset($_SERVER)) {
		if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
			$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
		} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
			$realip = $_SERVER['HTTP_CLIENT_IP'];
		} else {
			$realip = $_SERVER['REMOTE_ADDR'];
		}
	} else {
		if (getenv("HTTP_X_FORWARDED_FOR")) {
			$realip = getenv( "HTTP_X_FORWARDED_FOR");
		} elseif (getenv("HTTP_CLIENT_IP")) {
			$realip = getenv("HTTP_CLIENT_IP");
		} else {
			$realip = getenv("REMOTE_ADDR");
		}
	}
	return $realip;
}

THINKPHP获取IP方法:

(1)、ThinkPHP5通过助手函数即可获取

request()->ip()

(2)、通过自己解析

function get_client_ip($type = 0)
{
   $type = $type ? 1 : 0;
   static $ip = NULL;
   if ($ip !== NULL) {
       return $ip[$type];
   }
   if (isset($_SERVER['HTTP_X_REAL_IP'])) {
       //nginx 代理模式下,获取客户端真实IP
       $ip = $_SERVER['HTTP_X_REAL_IP'];
   } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
       //客户端的ip
       $ip = $_SERVER['HTTP_CLIENT_IP'];
   } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
       //浏览当前页面的用户计算机的网关
       $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
       $pos = array_search('unknown', $arr);
       if (false !== $pos) unset($arr[$pos]);
       $ip = trim($arr[0]);
   } elseif (isset($_SERVER['REMOTE_ADDR'])) {
       //浏览当前页面的用户计算机的ip地址
       $ip = $_SERVER['REMOTE_ADDR'];
   } else {
       $ip = $_SERVER['REMOTE_ADDR'];
   }
   // IP地址合法验证
   $long = sprintf("%u", ip2long($ip));
   $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);
   return $ip[$type];
}

 

参考文档:https://blog.csdn.net/mouday/article/details/121626509