SDK(PHP版本)说明

更新时间:

环境准备

  • PHP版本 7.1+

  • 查看PHP版本命令:php -v

  • <?php 
    echo phpversion();

下载SDK

如已购买IP地理位置库(离线版)商品,可进入实例详情,下载以下三个文件

  1. 离线数据库(数据文件,通常是**.dex)

  2. 授权证书文件(license文件,通常是**.lic)

  3. PHP语言SDK(通常是 **.phar )

注意

续费、升级商品套餐一定要同步更新license证书文件,如果license证书过期,则SDK会直接不可用。

安装SDK

PHP版本离线SDK采用了phar包安装方式,无需安装其它文件。将下载好的SDK(PHP语言)phar文件拷贝到项目中放置到安全目录,通过require/include引用即可。

快速入门

下面以查询某个IPV4地址为例演示如何使用:

<?php
require_once __DIR__ . "/resource/ipv4_2020-08-11_0742.phar";
$license = __DIR__ . "/resource/license-ipv4.lic";
$ipv4File = __DIR__ . "/resource/ipv4-geo.dex";

use AlibabaCloud\IPExplorer\FastIPGeoClient;
use AlibabaCloud\IPExplorer\Models\FastGeoConf;

$geoConf = new FastGeoConf();
$geoConf->licenseFilePath = $license;
$geoConf->dataFilePath = $ipv4File;

$client = new FastIPGeoClient($geoConf);
$result = $client->search('1.1.1.1');
echo($result);

SDK返回结果

{
	"country": "中国",
	"province": "上海市",
	"city": "上海市",
	"county": "",
	"isp": "阿里巴巴",
	"country_code": "CN",
	"country_en": "China",
	"province_en": "Shanghai",
	"city_en": "Shanghai",
	"longitude": "121.4726000",
	"latitude": "31.231000"
} 

字段说明:

字段

含义

country

国家

country_c

国家代码

country_en

国家英文

province

省/州

province_en

省/州英文

county

区/县

city

城市

city_en

城市英文

isp

运营商

longitude

经度

latitude

纬度

性能提高及优化

PHP由于语言特性,加载文件时不能常驻内存性能会慢一些,如果对性能有要求,可以采用workerman/swoole方式。

1、通过脚本可以启动一个常驻内存php进程,后续再次查找ip可以从内存中直接返回结果。

2、亦可以单独把获取ip剥离成服务,对业务本身代码不进行任何耦合。

下面以workermanhttp为示例演示如何使用:

composer require workerman/workerman
以下代码仅做演示提供思路,线上环境请自行封装配置
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . "/resource/ip_explorer_2020-08-13_0826.phar";//阿里云提供离线版SDK的phar包文件

use AlibabaCloud\IPExplorer\FastIPGeoClient;
use AlibabaCloud\IPExplorer\Models\FastGeoConf;
use Workerman\Worker;

//根据机器配置设置
ini_set('memory_limit', '5000M');
set_time_limit(0);

echo 'loading data...' . PHP_EOL;
$start = time();
$geoConf = new FastGeoConf();
$geoConf->licenseFilePath = dirname(dirname(__DIR__)) . "/resource/license-ipv4.lic";
$geoConf->dataFilePath = dirname(dirname(__DIR__)) . "/resource/ipv4-common-geo.dex";
$client = new FastIPGeoClient($geoConf);

$cost = time() - $start;
echo 'loading data done. cost : ' . (string)$cost . ' second.' . PHP_EOL;

// #### http worker ####
$httpWworker = new Worker('http://0.0.0.0:2345');

// 4 processes
$httpWworker->count = 4;

// Emitted when data received
$httpWworker->onMessage = function ($connection, $request) use (&$client) {
    $ip = $request->get('ip');
    if (empty($ip)) {
        $connection->send(json_encode(['code' => 400, 'msg' => 'ip format error']));
    } else {
        $res = $client->search($ip);
        if (null === $res) {
            $connection->send(json_encode(['code' => 404, 'msg' => 'data not found']));
        } else {
            $connection->send($res);
        }
    }
};

// Run all workers
Worker::runAll();

访问 http://192.168.33.10:2345/?ip=1.1.1.1&token=1111