2024-01-03 10:01:25 +08:00

230 lines
6.3 KiB
PHP
Executable File

<?php
namespace Qiniu;
use Qiniu\Http\Client;
use Qiniu\Http\Error;
use Qiniu\Http\Middleware\RetryDomainsMiddleware;
use Qiniu\Http\RequestOptions;
class Region
{
//源站上传域名
public $srcUpHosts;
//CDN加速上传域名
public $cdnUpHosts;
//资源管理域名
public $rsHost;
//资源列举域名
public $rsfHost;
//资源处理域名
public $apiHost;
//IOVIP域名
public $iovipHost;
// TTL
public $ttl;
//构造一个Region对象
public function __construct(
$srcUpHosts = array(),
$cdnUpHosts = array(),
$rsHost = "rs-z0.qiniuapi.com",
$rsfHost = "rsf-z0.qiniuapi.com",
$apiHost = "api.qiniuapi.com",
$iovipHost = null,
$ttl = null
) {
$this->srcUpHosts = $srcUpHosts;
$this->cdnUpHosts = $cdnUpHosts;
$this->rsHost = $rsHost;
$this->rsfHost = $rsfHost;
$this->apiHost = $apiHost;
$this->iovipHost = $iovipHost;
$this->ttl = $ttl;
}
//华东机房
public static function regionHuadong()
{
$regionHuadong = new Region(
array("up.qiniup.com"),
array('upload.qiniup.com'),
'rs-z0.qiniuapi.com',
'rsf-z0.qiniuapi.com',
'api.qiniuapi.com',
'iovip.qbox.me'
);
return $regionHuadong;
}
//华东机房内网上传
public static function qvmRegionHuadong()
{
$qvmRegionHuadong = new Region(
array("free-qvm-z0-xs.qiniup.com"),
'rs-z0.qiniuapi.com',
'rsf-z0.qiniuapi.com',
'api.qiniuapi.com',
'iovip.qbox.me'
);
return $qvmRegionHuadong;
}
//华北机房内网上传
public static function qvmRegionHuabei()
{
$qvmRegionHuabei = new Region(
array("free-qvm-z1-zz.qiniup.com"),
"rs-z1.qiniuapi.com",
"rsf-z1.qiniuapi.com",
"api-z1.qiniuapi.com",
"iovip-z1.qbox.me"
);
return $qvmRegionHuabei;
}
//华北机房
public static function regionHuabei()
{
$regionHuabei = new Region(
array('up-z1.qiniup.com'),
array('upload-z1.qiniup.com'),
"rs-z1.qiniuapi.com",
"rsf-z1.qiniuapi.com",
"api-z1.qiniuapi.com",
"iovip-z1.qbox.me"
);
return $regionHuabei;
}
//华南机房
public static function regionHuanan()
{
$regionHuanan = new Region(
array('up-z2.qiniup.com'),
array('upload-z2.qiniup.com'),
"rs-z2.qiniuapi.com",
"rsf-z2.qiniuapi.com",
"api-z2.qiniuapi.com",
"iovip-z2.qbox.me"
);
return $regionHuanan;
}
//华东2 机房
public static function regionHuadong2()
{
return new Region(
array('up-cn-east-2.qiniup.com'),
array('upload-cn-east-2.qiniup.com'),
"rs-cn-east-2.qiniuapi.com",
"rsf-cn-east-2.qiniuapi.com",
"api-cn-east-2.qiniuapi.com",
"iovip-cn-east-2.qiniuio.com"
);
}
//北美机房
public static function regionNorthAmerica()
{
//北美机房
$regionNorthAmerica = new Region(
array('up-na0.qiniup.com'),
array('upload-na0.qiniup.com'),
"rs-na0.qiniuapi.com",
"rsf-na0.qiniuapi.com",
"api-na0.qiniuapi.com",
"iovip-na0.qbox.me"
);
return $regionNorthAmerica;
}
//新加坡机房
public static function regionSingapore()
{
//新加坡机房
$regionSingapore = new Region(
array('up-as0.qiniup.com'),
array('upload-as0.qiniup.com'),
"rs-as0.qiniuapi.com",
"rsf-as0.qiniuapi.com",
"api-as0.qiniuapi.com",
"iovip-as0.qbox.me"
);
return $regionSingapore;
}
/*
* GET /v4/query?ak=<ak>&bucket=<bucket>
* @param string $ak
* @param string $bucket
* @param string $ucHost|null
* @param array $backupUcHosts
* @param int $retryTimes
* @param RequestOptions|null $reqOpt
* @return Response
**/
public static function queryRegion(
$ak,
$bucket,
$ucHost = null,
$backupUcHosts = array(),
$retryTimes = 2,
$reqOpt = null
) {
$region = new Region();
if (!$ucHost) {
$ucHost = "https://" . Config::QUERY_REGION_HOST;
}
$url = $ucHost . '/v4/query' . "?ak=$ak&bucket=$bucket";
if ($reqOpt == null) {
$reqOpt = new RequestOptions();
}
$reqOpt->middlewares = array(
new RetryDomainsMiddleware(
$backupUcHosts,
$retryTimes
)
);
$ret = Client::get($url, array(), $reqOpt);
if (!$ret->ok()) {
return array(null, new Error($url, $ret));
}
$r = ($ret->body === null) ? array() : $ret->json();
if (!is_array($r["hosts"]) || count($r["hosts"]) == 0) {
return array(null, new Error($url, $ret));
}
// parse region;
$regionHost = $r["hosts"][0];
$region->cdnUpHosts = array_merge($region->cdnUpHosts, $regionHost['up']['domains']);
$region->srcUpHosts = array_merge($region->srcUpHosts, $regionHost['up']['domains']);
// set specific hosts
$region->iovipHost = $regionHost['io']['domains'][0];
if (isset($regionHost['rs']['domains']) && count($regionHost['rs']['domains']) > 0) {
$region->rsHost = $regionHost['rs']['domains'][0];
} else {
$region->rsHost = Config::RS_HOST;
}
if (isset($regionHost['rsf']['domains']) && count($regionHost['rsf']['domains']) > 0) {
$region->rsfHost = $regionHost['rsf']['domains'][0];
} else {
$region->rsfHost = Config::RSF_HOST;
}
if (isset($regionHost['api']['domains']) && count($regionHost['api']['domains']) > 0) {
$region->apiHost = $regionHost['api']['domains'][0];
} else {
$region->apiHost = Config::API_HOST;
}
// set ttl
$region->ttl = $regionHost['ttl'];
return $region;
}
}