代码 IP地址获取函数

2024-11-19 00:03:29 +0800 CST views 807

#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地址获取需求。

复制全文 生成海报 编程 网络 PHP

推荐文章

API 管理系统售卖系统
2024-11-19 08:54:18 +0800 CST
Rust 高性能 XML 读写库
2024-11-19 07:50:32 +0800 CST
宝塔面板 Nginx 服务管理命令
2024-11-18 17:26:26 +0800 CST
Nginx 防止IP伪造,绕过IP限制
2025-01-15 09:44:42 +0800 CST
Golang - 使用 GoFakeIt 生成 Mock 数据
2024-11-18 15:51:22 +0800 CST
如何开发易支付插件功能
2024-11-19 08:36:25 +0800 CST
JavaScript 流程控制
2024-11-19 05:14:38 +0800 CST
黑客帝国代码雨效果
2024-11-19 01:49:31 +0800 CST
php指定版本安装php扩展
2024-11-19 04:10:55 +0800 CST
CentOS 镜像源配置
2024-11-18 11:28:06 +0800 CST
Vue3中如何扩展VNode?
2024-11-17 19:33:18 +0800 CST
Vue3中的响应式原理是什么?
2024-11-19 09:43:12 +0800 CST
在 Rust 生产项目中存储数据
2024-11-19 02:35:11 +0800 CST
ElasticSearch简介与安装指南
2024-11-19 02:17:38 +0800 CST
使用临时邮箱的重要性
2025-07-16 17:13:32 +0800 CST
Vue3中如何使用计算属性?
2024-11-18 10:18:12 +0800 CST
Boost.Asio: 一个美轮美奂的C++库
2024-11-18 23:09:42 +0800 CST
一文详解回调地狱
2024-11-19 05:05:31 +0800 CST
Golang 随机公平库 satmihir/fair
2024-11-19 03:28:37 +0800 CST
程序员茄子在线接单