SDK(PHP版本)说明
更新时间:
环境准备
PHP版本 7.1+
查看PHP版本命令:php -v
<?php echo phpversion();
下载SDK
如已购买IP地理位置库(离线版)商品,可进入实例详情,下载以下三个文件
离线数据库(数据文件,通常是**.dex)
授权证书文件(license文件,通常是**.lic)
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剥离成服务,对业务本身代码不进行任何耦合。
下面以workerman的http为示例演示如何使用:
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();该文章对您有帮助吗?