• 注册
  • WordPress后台-外观-小工具 进行配置小工具

    其他 其他 关注:2 内容:12

    Geoip库用法

  • 查看作者
  • 打赏作者
  • 拉黑名单
  • 当前位置: 西塞网络科技 > 其他 > 正文
    • 其他
    • VIP
      管理员

      如图:

      Geoip库用法

      本站归属地就是用geoip写的接口

      无需其他接口即可获取

      相关代码:

      <?php
      /**
       * IP 查询接口
       * 支持 ?ip=1.1.1.1
       * 返回 JSON 格式:
       * {"country":"中国","province":"湖南","city":"长沙"}
       */
      header('Content-Type: application/json; charset=utf-8');
      error_reporting(0);
      require_once __DIR__ . '/geoip/vendor/autoload.php'; // 注意 vendor 路径
      use GeoIp2\Database\Reader;
      $ip = isset($_GET['ip']) ? $_GET['ip'] : $_SERVER['REMOTE_ADDR'];
      // 简单校验 IP
      if(!filter_var($ip, FILTER_VALIDATE_IP)){
          echo json_encode(['error'=>'请输入正确 IP']);
          exit;
      }
      try {
          // GeoLite2 数据库路径
          $reader = new Reader(__DIR__ . '/geoip/GeoLite2-City.mmdb');
          $record = $reader->city($ip);
          $country  = $record->country->names['zh-CN'] ?? $record->country->name ?? '';
          $province = $record->mostSpecificSubdivision->names['zh-CN'] ?? $record->mostSpecificSubdivision->name ?? '';
          $city     = $record->city->names['zh-CN'] ?? $record->city->name ?? '';
          // 国内显示市
          if($country === '中国'){
              $city_name = $city ?: $province;
          } else {
              // 国外显示州/省,如果没有州显示国家
              $city_name = $province ?: $country;
          }
          echo json_encode([
              'country'  => $country,
              'province' => $province,
              'city'     => $city_name
          ], JSON_UNESCAPED_UNICODE);
      } catch (Exception $e){
          echo json_encode([
              'country' => '未知',
              'province'=> '',
              'city'    => '未知'
          ], JSON_UNESCAPED_UNICODE);
      }

      输出格式:

      Geoip库用法

      {
       "country": "美国",
       "province": "弗吉尼亚州",
       "city": "弗吉尼亚州"
      }

      其他文件在下面可共下载

      demo.ama.pub_4ScXF.zip

      请登录之后再进行评论

      登录
    • 帖子间隔 侧栏位置: