#IP地址获取函数
本文档介绍了几个用于获取客户端和服务器IP地址的PHP函数,并对其功能进行了优化和解释。
##1.获取客户端IP地址
//获取客户端(浏览器)请求的IP地址
functionget_client_ip(){
//尝试从不同的HTTP头部获取真实的IP地址
if(isset($_SERVER['HTTP_CF_CONNECTING_IP'])){
$ip=$_SERVER['HTTP_CF_CONNECTING_IP'];
}elseif(isset($_SERVER['HTTP_X_REAL_IP'])){
$ip=$_SERVER['HTTP_X_REAL_IP'];
}elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
$ip=$_SERVER['HTTP_CLIENT_IP'];
}elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
//提取第一个IP地址
$ipList=explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$ip=trim($ipList[0]);
}else{
$ip=$_SERVER['REMOTE_ADDR'];
}
//验证IP地址的合法性
returnis_ip($ip)?$ip:'IP未知';
}
###功能说明
该函数尝试从多个HTTP头部获取客户端的真实IP地址,优先级依次为:
-HTTP_CF_CONNECTING_IP
-HTTP_X_REAL_IP
-HTTP_CLIENT_IP
-HTTP_X_FORWARDED_FOR
-REMOTE_ADDR
如果获取到的IP地址不合法,则返回'IP未知'
。
##2.获取服务器外网IP地址
//获取服务器的外网IP地址
functionget_server_public_ip(){
if(!empty($_SERVER['SERVER_NAME'])){
returngethostbyname($_SERVER['SERVER_NAME']);
}elseif(!empty($_SERVER['HTTP_CLIENT_IP'])&&is_ip($_SERVER['HTTP_CLIENT_IP'])){
return$_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])&&is_ip($_SERVER['HTTP_X_FORWARDED_FOR'])){
return$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
returnis_ip($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'未知IP';
}
}
###功能说明
该函数获取服务器的外网IP地址,优先检查:
-SERVER_NAME
-HTTP_CLIENT_IP
-HTTP_X_FORWARDED_FOR
-REMOTE_ADDR
如果所有来源都无法提供合法的IP地址,则返回'未知IP'
。
##3.获取服务器内网IP地址
//获取服务器的内网IP地址
functionget_server_private_ip(){
$ip=!empty($_SERVER['SERVER_ADDR'])?$_SERVER['SERVER_ADDR']:gethostbyname(gethostname());
returnis_ip($ip)?$ip:'IP未知';
}
###功能说明
该函数获取服务器的内网IP地址,首先检查SERVER_ADDR
,如果为空,则通过主机名获取IP地址。如果获取到的IP地址不合法,则返回'IP未知'
。
##4.验证IP地址合法性
//验证IP地址是否合法(IPv4或IPv6)
functionis_ip($ip){
returnfilter_var($ip,FILTER_VALIDATE_IP)!==false;
}
###功能说明
该函数使用PHP的filter_var
函数验证给定的IP地址是否合法,支持IPv4和IPv6。
##总结
以上函数提供了一种有效的方法来获取客户端和服务器的IP地址,并确保其合法性。通过合理的优先级和验证机制,可以有效地处理不同环境下的IP地址获取需求。