📊 NPS内网穿透 流量单位格式化函数解析与使用说明api开发

VFX大学 Linux/macOS 与自动化运维 📊 NPS内网穿透 流量单位格式化函数解析与使用说明api开发

标签: 

  • This topic is empty.
正在查看 0 条回复
  • 作者
    帖子
    • #833

      追光
      管理员

      这份文档所有单位换算、接口地址、使用逻辑,全是通过无数次抓包、试错、逆向分析一点点摸索出来的。官方没有正式文档,全靠实践总结。在此分享给更多开发者。希望不要再走一遍弯路。

      这是一个非常实用的函数,索性我把函数也分享出来给大家参考。下面是我为你整理的一篇完整博文样式的技术说明文档,可以用于:NPS 系统接口开发文档的一部分。


      在对接 NPS API 时,经常会遇到各种类型的流量或速率字段:FlowLimitExportFlowNowRate……

      这些字段单位不一,有的是 MB、有的是 Byte、还有的是 KB/s,我们需要一个统一的格式化工具函数来处理。

      以下是我在开发 WordPress 插件过程中整理出的格式化函数,经过反复修改完善,已适配各种实际字段:


      ✅ 核心函数:

      format_flow_mb()

      /**
       * ✅ 流量单位转化器,输入单位 MB、Byte 或 KB/s,自动格式化为 MB、GB、Mbps 等。
       * @param float|int $value 流量或速率原始值
       * @param string $field 字段名,用于判断类型(如 flowlimit、inletflow、nowrate)
       * @param int $decimals 保留小数位,默认2
       * @return string 格式化后的值(如 "512.00 MB"、"1.2 GB"、"3.5 Mbps")
       */
      function format_flow_mb($value, $field = '', $decimals = 2) {
          $value = floatval($value);
          if ($value < 0) $value = 0;
      
          $field = strtolower($field);
      
          // 🎯 流量包限制:单位通常是 MB,显示为 MB / GB
          if (in_array($field, ['flowlimit', 'flow_limit'])) {
              return $value >= 1024
                  ? round($value / 1024, $decimals) . ' GB'
                  : round($value, $decimals) . ' MB';
          }
      
          // 📉 速率限制:单位为 KB/s,转换为 Mbps
          if (in_array($field, ['ratelimit', 'rate_limit'])) {
              if ($value <= 0) return '不限速';
              $mbps = ($value * 8) / 1000;
              return round($mbps, $decimals) . ' Mbps';
          }
      
          // 📥 出/入流量:单位为 Byte,转换为 GB/MB/KB/B
          if (in_array($field, ['exportflow', 'inletflow', 'export_flow', 'inlet_flow'])) {
              if ($value >= 1073741824) {
                  return round($value / 1073741824, $decimals) . ' GB';
              } elseif ($value >= 1048576) {
                  return round($value / 1048576, $decimals) . ' MB';
              } elseif ($value >= 1024) {
                  return round($value / 1024, $decimals) . ' KB';
              } else {
                  return $value . ' B';
              }
          }
      
          // 🚀 实时速率(当前下载上传速度):单位 Byte/s,转换为 Mbps 并显示原速率
          if (in_array($field, ['nowrate', 'now_rate'])) {
              $mbps = ($value * 8) / 1000 / 1000;
              if ($value >= 1048576) {
                  return round($value / 1048576, $decimals) . ' MB/s (' . round($mbps, $decimals) . ' Mbps)';
              } elseif ($value >= 1024) {
                  return round($value / 1024, $decimals) . ' KB/s (' . round($mbps, $decimals) . ' Mbps)';
              } else {
                  return $value . ' B/s (' . round($mbps, $decimals) . ' Mbps)';
              }
          }
      
          // 📦 默认单位处理(MB → GB)
          return $value >= 1024
              ? round($value / 1024, $decimals) . ' GB'
              : round($value, $decimals) . ' MB';
      }

      🧠 字段单位说明一览

      字段名

      原始单位

      格式化后样式

      说明

      flowlimit

      MB

      128.00 MB or 1.25 GB

      套餐流量上限(静态)

      ratelimit

      KB/s

      2.00 Mbps

      速率限制

      exportflow

      Byte

      1.23 GB

      客户端已上传流量(累计)

      inletflow

      Byte

      456.78 MB

      客户端已下载流量(累计)

      nowrate

      Byte/s

      200 KB/s (1.60 Mbps)

      实时速率(显示在监控面板)


      ✅ 示例用法

      $export = format_flow_mb($client_data['Flow']['ExportFlow'], 'export_flow');
      $inlet  = format_flow_mb($client_data['Flow']['InletFlow'], 'inlet_flow');
      $rate   = format_flow_mb($client_data['Flow']['NowRate'], 'now_rate');

      🔚 总结

      这个函数统一了解析格式,避免在每个页面上写重复逻辑,非常适用于 NPS 自建系统或插件的信息面板用户中心流量统计等模块。

      如果你也在使用 NPS 做平台开发,可以把这个函数做成全局辅助函数(helper),或注册到 WordPress 的 functions.php 里。

正在查看 0 条回复
  • 在下方一键注册,登录后就可以回复啦。