新增自定义域名功能 (#8)

Co-authored-by: liucheng.yao <liucheng.yao@ucloud.cn>
This commit is contained in:
babybaby 2025-11-10 16:01:18 +08:00 committed by GitHub
parent ab79c6b1ae
commit 347a81c90a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 44 additions and 32 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.DS_Store
.idea/

View File

@ -14,6 +14,10 @@ ucloud/conf.php 为配置文件,按需填写:
- $UCLOUD_PRIVATE_KEY = 'paste your private key here'; - $UCLOUD_PRIVATE_KEY = 'paste your private key here';
若需使用自定义域名,可额外设置:
- $UCLOUD_CUSTOM_DOMAIN = 'your-custom-domain.com'; // 可选,置空则继续使用 bucket + suffix
Demo 目录中,包含各个接口的使用例子: Demo 目录中,包含各个接口的使用例子:
- append.php - append.php
- delete.php - delete.php

View File

@ -2,14 +2,18 @@
global $SDK_VER; global $SDK_VER;
global $UCLOUD_PROXY_SUFFIX; global $UCLOUD_PROXY_SUFFIX;
global $UCLOUD_CUSTOM_DOMAIN;
global $UCLOUD_PUBLIC_KEY; global $UCLOUD_PUBLIC_KEY;
global $UCLOUD_PRIVATE_KEY; global $UCLOUD_PRIVATE_KEY;
$SDK_VER = "1.0.9"; $SDK_VER = "1.1.0";
//空间域名后缀,请查看控制台上空间域名再配置此处 //空间域名后缀,请查看控制台上空间域名再配置此处
//https://docs.ucloud.cn/storage_cdn/ufile/tools/introduction //https://docs.ucloud.cn/storage_cdn/ufile/tools/introduction
$UCLOUD_PROXY_SUFFIX = '.cn-bj.ufileos.com'; //如果是其他地域的,请参考上面的说明 $UCLOUD_PROXY_SUFFIX = '.cn-bj.ufileos.com'; //如果是其他地域的,请参考上面的说明
//可选使用自定义域名your-custom-domain.com置空则继续使用 bucket + suffix
$UCLOUD_CUSTOM_DOMAIN = '';
$UCLOUD_PUBLIC_KEY = 'paste your public key here'; $UCLOUD_PUBLIC_KEY = 'paste your public key here';
$UCLOUD_PRIVATE_KEY = 'paste your private key here'; $UCLOUD_PRIVATE_KEY = 'paste your private key here';

View File

@ -18,8 +18,7 @@ function UCloud_PutFile($bucket, $key, $file)
$f = @fopen($file, "r"); $f = @fopen($file, "r");
if (!$f) return array(null, new UCloud_Error(-1, -1, "open $file error")); if (!$f) return array(null, new UCloud_Error(-1, -1, "open $file error"));
global $UCLOUD_PROXY_SUFFIX; $host = UCloud_GetHost($bucket);
$host = $bucket . $UCLOUD_PROXY_SUFFIX;
$path = $key; $path = $key;
$content = @fread($f, filesize($file)); $content = @fread($f, filesize($file));
list($mimetype, $err) = GetFileMimeType($file); list($mimetype, $err) = GetFileMimeType($file);
@ -49,8 +48,7 @@ function UCloud_MultipartForm($bucket, $key, $file)
$f = @fopen($file, "r"); $f = @fopen($file, "r");
if (!$f) return array(null, new UCloud_Error(-1, -1, "open $file error")); if (!$f) return array(null, new UCloud_Error(-1, -1, "open $file error"));
global $UCLOUD_PROXY_SUFFIX; $host = UCloud_GetHost($bucket);
$host = $bucket . $UCLOUD_PROXY_SUFFIX;
$path = ""; $path = "";
$fsize = filesize($file); $fsize = filesize($file);
$content = ""; $content = "";
@ -89,8 +87,7 @@ function UCloud_MInit($bucket, $key)
return array(null, $err); return array(null, $err);
} }
global $UCLOUD_PROXY_SUFFIX; $host = UCloud_GetHost($bucket);
$host = $bucket . $UCLOUD_PROXY_SUFFIX;
$path = $key; $path = $key;
$querys = array( $querys = array(
"uploads" => "" "uploads" => ""
@ -114,8 +111,6 @@ function UCloud_MUpload($bucket, $key, $file, $uploadId, $blkSize, $partNumber=0
$f = @fopen($file, "r"); $f = @fopen($file, "r");
if (!$f) return array(null, new UCloud_Error(-1, -1, "open $file error")); if (!$f) return array(null, new UCloud_Error(-1, -1, "open $file error"));
global $UCLOUD_PROXY_SUFFIX;
$etagList = array(); $etagList = array();
list($mimetype, $err) = GetFileMimeType($file); list($mimetype, $err) = GetFileMimeType($file);
if ($err) { if ($err) {
@ -124,7 +119,7 @@ function UCloud_MUpload($bucket, $key, $file, $uploadId, $blkSize, $partNumber=0
} }
$client = new UCloud_AuthHttpClient(null); $client = new UCloud_AuthHttpClient(null);
for(;;) { for(;;) {
$host = $bucket . $UCLOUD_PROXY_SUFFIX; $host = UCloud_GetHost($bucket);
$path = $key; $path = $key;
if (@fseek($f, $blkSize*$partNumber, SEEK_SET) < 0) { if (@fseek($f, $blkSize*$partNumber, SEEK_SET) < 0) {
fclose($f); fclose($f);
@ -170,8 +165,7 @@ function UCloud_MFinish($bucket, $key, $uploadId, $etagList, $newKey = '')
return array(null, $err); return array(null, $err);
} }
global $UCLOUD_PROXY_SUFFIX; $host = UCloud_GetHost($bucket);
$host = $bucket . $UCLOUD_PROXY_SUFFIX;
$path = $key; $path = $key;
$querys = array( $querys = array(
'uploadId' => $uploadId, 'uploadId' => $uploadId,
@ -194,8 +188,7 @@ function UCloud_MCancel($bucket, $key, $uploadId)
return array(null, $err); return array(null, $err);
} }
global $UCLOUD_PROXY_SUFFIX; $host = UCloud_GetHost($bucket);
$host = $bucket . $UCLOUD_PROXY_SUFFIX;
$path = $key; $path = $key;
$querys = array( $querys = array(
'uploadId' => $uploadId 'uploadId' => $uploadId
@ -236,8 +229,7 @@ function UCloud_UploadHit($bucket, $key, $file)
} }
fclose($f); fclose($f);
global $UCLOUD_PROXY_SUFFIX; $host = UCloud_GetHost($bucket);
$host = $bucket . $UCLOUD_PROXY_SUFFIX;
$path = "uploadhit"; $path = "uploadhit";
$querys = array( $querys = array(
'Hash' => $fileHash, 'Hash' => $fileHash,
@ -261,8 +253,7 @@ function UCloud_Delete($bucket, $key)
return array(null, $err); return array(null, $err);
} }
global $UCLOUD_PROXY_SUFFIX; $host = UCloud_GetHost($bucket);
$host = $bucket . $UCLOUD_PROXY_SUFFIX;
$path = "$key"; $path = "$key";
$req = new HTTP_Request('DELETE', array('host'=>$host, 'path'=>$path), null, $bucket, $key); $req = new HTTP_Request('DELETE', array('host'=>$host, 'path'=>$path), null, $bucket, $key);
@ -281,8 +272,7 @@ function UCloud_Head($bucket, $key)
return array(null, $err); return array(null, $err);
} }
global $UCLOUD_PROXY_SUFFIX; $host = UCloud_GetHost($bucket);
$host = $bucket . $UCLOUD_PROXY_SUFFIX;
$path = "$key"; $path = "$key";
$req = new HTTP_Request('HEAD', array('host'=>$host, 'path'=>$path), null, $bucket, $key); $req = new HTTP_Request('HEAD', array('host'=>$host, 'path'=>$path), null, $bucket, $key);
@ -305,8 +295,7 @@ function UCloud_AppendFile($bucket, $key, $file, $position)
$f = @fopen($file, "r"); $f = @fopen($file, "r");
if (!$f) return array(null, new UCloud_Error(-1, -1, "open $file error")); if (!$f) return array(null, new UCloud_Error(-1, -1, "open $file error"));
global $UCLOUD_PROXY_SUFFIX; $host = UCloud_GetHost($bucket);
$host = $bucket . $UCLOUD_PROXY_SUFFIX;
$key = $key . "?append&position=" . $position; $key = $key . "?append&position=" . $position;
$path = $key; $path = $key;
$content = @fread($f, filesize($file)); $content = @fread($f, filesize($file));
@ -334,8 +323,7 @@ function UCloud_ListObjects($bucket, $path_prefix, $marker, $count, $delimiter)
return array(null, $err); return array(null, $err);
} }
global $UCLOUD_PROXY_SUFFIX; $host = UCloud_GetHost($bucket);
$host = $bucket . $UCLOUD_PROXY_SUFFIX;
$query = "listobjects&prefix=" . $path_prefix ."&marker=". $marker . "&max-keys=" . $count ."&delimiter=" .$delimiter; $query = "listobjects&prefix=" . $path_prefix ."&marker=". $marker . "&max-keys=" . $count ."&delimiter=" .$delimiter;
parse_str($query,$arr); parse_str($query,$arr);
$path = "?" . http_build_query($arr); $path = "?" . http_build_query($arr);
@ -352,8 +340,7 @@ function UCloud_ListObjects($bucket, $path_prefix, $marker, $count, $delimiter)
// @results: $url // @results: $url
function UCloud_MakePublicUrl($bucket, $key) function UCloud_MakePublicUrl($bucket, $key)
{ {
global $UCLOUD_PROXY_SUFFIX; return UCloud_GetHost($bucket) . "/" . rawurlencode($key);
return $bucket . $UCLOUD_PROXY_SUFFIX . "/" . rawurlencode($key);
} }
//------------------------------生成私有文件Url------------------------------ //------------------------------生成私有文件Url------------------------------
// @results: $url // @results: $url

View File

@ -112,11 +112,26 @@ function GetFileMimeType($filename)
return array($mimetype, null); return array($mimetype, null);
} }
function UCloud_GetHost($bucket) {
global $UCLOUD_CUSTOM_DOMAIN;
global $UCLOUD_PROXY_SUFFIX;
$customDomain = trim($UCLOUD_CUSTOM_DOMAIN);
if ($customDomain !== '') {
return $customDomain;
}
return $bucket . $UCLOUD_PROXY_SUFFIX;
}
function CheckConfig($action) { function CheckConfig($action) {
global $UCLOUD_PUBLIC_KEY; global $UCLOUD_PUBLIC_KEY;
global $UCLOUD_PRIVATE_KEY; global $UCLOUD_PRIVATE_KEY;
global $UCLOUD_PROXY_SUFFIX; global $UCLOUD_PROXY_SUFFIX;
global $UCLOUD_CUSTOM_DOMAIN;
$customDomain = trim($UCLOUD_CUSTOM_DOMAIN);
switch ($action) { switch ($action) {
case ActionType::PUTFILE: case ActionType::PUTFILE:
@ -129,17 +144,17 @@ function CheckConfig($action) {
case ActionType::UPLOADHIT: case ActionType::UPLOADHIT:
case ActionType::LISTOBJECTS: case ActionType::LISTOBJECTS:
case ActionType::HEAD: case ActionType::HEAD:
if ($UCLOUD_PROXY_SUFFIX == "") { if ($customDomain === '' && $UCLOUD_PROXY_SUFFIX == "") {
return new UCloud_Error(400, -1, "no proxy suffix found in config"); return new UCloud_Error(400, -1, "no proxy suffix or custom domain found in config");
} else if ($UCLOUD_PUBLIC_KEY == "" || strstr($UCLOUD_PUBLIC_KEY, " ") != FALSE) { } else if ($UCLOUD_PUBLIC_KEY == "" || strstr($UCLOUD_PUBLIC_KEY, " ") != FALSE) {
return new UCloud_Error(400, -1, "invalid public key found in config"); return new UCloud_Error(400, -1, "invalid public key found in config");
} else if ($UCLOUD_PRIVATE_KEY == "" || strstr($UCLOUD_PRIVATE_KEY, " ") != FALSE) { } else if ($UCLOUD_PRIVATE_KEY == "" || strstr($UCLOUD_PRIVATE_KEY, " ") != FALSE) {
return new UCloud_Error(400, -1, "invalid private key found in config"); return new UCloud_Error(400, -1, "invalid private key found in config");
} }
break; break;
case ActionType::GETFILE: case ActionType::GETFILE:
if ($UCLOUD_PROXY_SUFFIX == "") { if ($customDomain === '' && $UCLOUD_PROXY_SUFFIX == "") {
return new UCloud_Error(400, -1, "no proxy suffix found in config"); return new UCloud_Error(400, -1, "no proxy suffix or custom domain found in config");
} }
break; break;
default: default: