本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
使用PHP SDK V2发起OSS请求时,您需要初始化一个OSS Client实例,并根据需要修改默认配置项。
注意事项
初始化OSS Client前,您需要配置访问凭证,本文以从环境变量读取访问凭证为例,更多配置示例请参见配置访问凭证。
关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名。
前置条件
在配置客户端前,您需要先使用RAM用户AccessKey完成配置环境变量。
使用RAM用户AccessKey配置环境变量。
Linux
在命令行界面执行以下命令来将环境变量设置追加到
~/.bashrc
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
执行以下命令使变更生效。
source ~/.bashrc
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
在终端中执行以下命令,查看默认Shell类型。
echo $SHELL
根据默认Shell类型进行操作。
Zsh
执行以下命令来将环境变量设置追加到
~/.zshrc
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
执行以下命令使变更生效。
source ~/.zshrc
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
执行以下命令来将环境变量设置追加到
~/.bash_profile
文件中。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
执行以下命令使变更生效。
source ~/.bash_profile
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
在CMD中运行以下命令。
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
运行以下命令,检查环境变量是否生效。
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
在PowerShell中运行以下命令。
[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
运行以下命令,检查环境变量是否生效。
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
参考上述方式修改系统环境变量后,请重启或刷新您的编译运行环境,包括IDE、命令行界面、其他桌面应用程序及后台服务,以确保最新的系统环境变量成功加载。
默认配置示例
PHP SDK V2默认使用V4签名,在初始化Client时,您需要指定阿里云通用Region ID作为发起请求地域的标识,本示例代码使用华东1(杭州)Region ID:cn-hangzhou。如需查询其它Region ID请参见OSS地域和访问域名。
PHP SDK V2可以通过Endpoint参数,自定义服务请求的访问域名。当不指定时,SDK默认根据Region信息,构造公网访问域名。例如当Region为'cn-hangzhou'时,构造出来的访问域名为'https://oss-cn-hangzhou.aliyuncs.com'。
PHP SDK V2构造访问域名时默认采用https协议,如需采用http协议,请在指定域名时指定为http,例如'http://oss-cn-hangzhou.aliyuncs.com'。
<?php
// 引入自动加载文件,确保依赖库能够正确加载
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 使用EnvironmentVariableCredentialsProvider从环境变量中读取Access Key ID和Access Key Secret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
# 加载SDK的默认配置,并设置凭证提供者
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 设置凭证提供者
// 方式一: 只填写Region即可
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
$cfg->setRegion(region: "cn-hangzhou");
// // 方式二: 直接填写Region和Endpoint
// // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
// // 填写Bucket所在地域对应的公网Endpoint。以华东1(杭州)为例,Endpoint填写为'https://oss-cn-hangzhou.aliyuncs.com',
// // 如需指定为http协议,请在指定域名时填写为'http://oss-cn-hangzhou.aliyuncs.com'
// $cfg->setRegion(region: 'cn-hangzhou')->setEndpoint(endpoint: 'https://oss-cn-hangzhou.aliyuncs.com');
// 创建OSS客户端实例
$client = new Oss\Client($cfg);
// 使用创建好的client执行后续操作...
常见场景配置示例
内网域名配置示例
当您的应用部署在阿里云的ECS实例上,并且需要频繁访问同地域的OSS资源时,使用内网域名可以降低流量成本并提高访问速度。
以下是使用OSS内网域名配置OSSClient的示例代码。
<?php
// 引入自动加载文件,确保依赖库能够正确加载
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 使用EnvironmentVariableCredentialsProvider从环境变量中读取Access Key ID和Access Key Secret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
# 加载SDK的默认配置,并设置凭证提供者
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 设置凭证提供者
// 方式一: 填写Region并设置setUseInternalEndpoint为true
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
$cfg->setRegion('cn-hangzhou')->setUseInternalEndpoint(true);
// // 方式二: 直接填写Region和Endpoint
// // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
// // 填写Bucket所在地域对应的内网Endpoint。以华东1(杭州)为例,Endpoint填写为'https://oss-cn-hangzhou-internal.aliyuncs.com',
// // 如需指定为http协议,请在指定域名时填写为'http://oss-cn-hangzhou-internal.aliyuncs.com'
// $cfg->setRegion('cn-hangzhou')->setEndpoint('https://oss-cn-hanghzou-internal.aliyuncs.com');
// 创建OSS客户端实例
$client = new Oss\Client($cfg);
// 使用创建好的client执行后续操作...
自定义域名配置示例
当您有多个不同的OSS Bucket用于不同的目的时,可以通过为每个Bucket设置不同的子域名来更好地管理和组织资源。
以下是使用自定义域名配置OSSClient的示例代码,以 'www.example-***.com' 域名 绑定到 'cn-hangzhou' 区域的存储空间为例
您需要先将自定义域名绑定至Bucket默认域名,否则将引发报错!关于绑定自定义域名的详细操作,请参见绑定自定义域名至Bucket默认域名。
<?php
// 引入自动加载文件,确保依赖库能够正确加载
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 使用EnvironmentVariableCredentialsProvider从环境变量中读取Access Key ID和Access Key Secret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
# 加载SDK的默认配置,并设置凭证提供者
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 设置凭证提供者
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
// 填写您的自定义域名。例如www.example-***.com,请注意,setUseCname设置true开启CNAME选项,否则无法使用自定义域名
$cfg->setRegion('cn-hangzhou')->setEndpoint('www.example-***.com')->setUseCname(true);
// 创建OSS客户端实例
$client = new Oss\Client($cfg);
// 使用创建好的client执行后续操作...
传输加速域名配置示例
以下是使用传输加速域名配置OSSClient的示例代码。
<?php
// 引入自动加载文件,确保依赖库能够正确加载
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 使用EnvironmentVariableCredentialsProvider从环境变量中读取Access Key ID和Access Key Secret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
# 加载SDK的默认配置,并设置凭证提供者
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 设置凭证提供者
// 方式一: 填写Region并设置setUseAccelerateEndpoint为true
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
$cfg->setRegion('cn-hangzhou')->setUseAccelerateEndpoint(true);
// // 方式二: 直接填写Region和Endpoint
// // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
// // 填写Bucket所在地域对应的传输加速Endpoint。以华东1(杭州)为例,Endpoint填写为'https://oss-accelerate.aliyuncs.com',
// $cfg->setRegion('cn-hangzhou')->setEndpoint('https://oss-accelerate.aliyuncs.com');
// 创建OSS客户端实例
$client = new Oss\Client($cfg);
// 使用创建好的client执行后续操作...
专有域配置示例
以下是使用专有域配置OSSClient的示例代码。
<?php
// 引入自动加载文件,确保依赖库能够正确加载
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 使用EnvironmentVariableCredentialsProvider从环境变量中读取Access Key ID和Access Key Secret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
# 加载SDK的默认配置,并设置凭证提供者
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 设置凭证提供者
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
// 填写您的专有域。例如:https://service.corp.example.com
$cfg->setRegion('cn-hangzhou')->setEndpoint('https://service.corp.example.com');
// 创建OSS客户端实例
$client = new Oss\Client($cfg);
// 使用创建好的client执行后续操作...
连接超时配置示例
以下代码用于设置OSSClient的连接超时时间。
<?php
// 引入自动加载文件,确保依赖库能够正确加载
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 使用EnvironmentVariableCredentialsProvider从环境变量中读取Access Key ID和Access Key Secret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
# 加载SDK的默认配置,并设置凭证提供者
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 设置凭证提供者
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou
$cfg->setRegion(region: "cn-hangzhou");
# 设置建立连接的超时时间
$cfg->setConnectTimeout(connectTimeout: 30);
# 设置应用读写数据的超时时间
$cfg->setReadwriteTimeout(readwriteTimeout:30);
// 创建OSS客户端实例
$client = new Oss\Client($cfg);
// 使用创建好的client执行后续操作...
swoole下使用协程配置示例
以下代码演示了基于swoole框架下创建支持协程的 OSS 客户端示例。
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use GuzzleHttp\HandlerStack;
use Hyperf\Guzzle\CoroutineHandler;
use function Hyperf\Coroutine\co;
// 配置 OSS 客户端
$region = 'cn-hangzhou'; // OSS 区域
$bucket = 'bucket-name'; // 目标 Bucket 名称
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); // 从环境变量加载凭证
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 设置凭证提供者
$cfg->setRegion(region: $region); // 设置区域
$cfg->setEndpoint(endpoint: 'http://oss-cn-hangzhou.aliyuncs.com'); // 设置访问域名
// 创建支持协程的 OSS 客户端
$client = new Oss\Client(config: $cfg, options: ['handler' => HandlerStack::create(handler: new CoroutineHandler())]);
// 协程任务 1:上传 swoole.txt
co(function () use ($client, $bucket) {
try {
$key = 'swoole.txt'; // 对象名称
$data = 'Hello OSS'; // 对象内容
$request = new Oss\Models\PutObjectRequest($bucket, $key); // 创建上传请求
$request->body = Oss\Utils::streamFor($data); // 设置请求体
$result = $client->putObject(request: $request); // 执行上传
echo "Task 1 Result:\n" . var_export($result, true) . "\n"; // 输出结果
} catch (\Exception $e) {
echo "Task 1 Error: " . $e->getMessage() . "\n"; // 捕获异常
}
});
// 协程任务 2:上传 hyperf.txt
co(function () use ($client, $bucket) {
try {
$key = 'hyperf.txt'; // 对象名称
$data = 'Hello OSS'; // 对象内容
$request = new Oss\Models\PutObjectRequest($bucket, $key); // 创建上传请求
$request->body = Oss\Utils::streamFor($data); // 设置请求体
$result = $client->putObject($request); // 执行上传
echo "Task 2 Result:\n" . var_export($result, true) . "\n"; // 输出结果
} catch (\Exception $e) {
echo "Task 2 Error: " . $e->getMessage() . "\n"; // 捕获异常
}
});
配置参数汇总
参数名 | 说明 | 示例 |
region | (必选)请求发送的区域, 必选 | setRegion("cn-hangzhou") |
credentialsProvider | (必选)设置访问凭证 | setCredentialsProvider(provider) |
endpoint | 访问域名 | setEndpoint("oss-cn-hanghzou.aliyuncs.com") |
retryMaxAttempts | HTTP请求时的最大尝试次数, 默认值为 3 | setRetryMaxAttempts(5) |
retryer | HTTP请求时的重试实现 | setRetryer(customRetryer) |
connectTimeout | 建立连接的超时时间, 默认值为 10 秒 | setConnectTimeout(5* time.Second) |
readWriteTimeout | 应用读写数据的超时时间, 默认值为 20 秒 | setReadWriteTimeout(30 * time.Second) |
insecureSkipVerify | 是否跳过SSL证书校验,默认检查SSL证书 | setInsecureSkipVerify(true) |
enabledRedirect | 是否开启HTTP重定向, 默认不开启 | setEnabledRedirect(true) |
proxyHost | 设置代理服务器 | setProxyHost(‘http://user:passswd@proxy.example-***.com’) |
signatureVersion | 签名版本,默认值为v4 | setSignatureVersion("v1") |
disableSSL | 不使用https请求,默认使用https | setDisableSSL(true) |
usePathStyle | 使用路径请求风格,即二级域名请求风格,默认为bucket托管域名 | setUsePathStyle(true) |
useCName | 是否使用自定义域名访问,默认不使用 | setUseCName(true) |
useDualStackEndpoint | 是否使用双栈域名访问,默认不使用 | setUseDualStackEndpoint(true) |
useAccelerateEndpoint | 是否使用传输加速域名访问,默认不使用 | setUseAccelerateEndpoint(true) |
useInternalEndpoint | 是否使用内网域名访问,默认不使用 | setUseInternalEndpoint(true) |
additionalHeaders | 指定额外的签名请求头,V4签名下有效 | setAdditionalHeaders([‘content-length’]) |
userAgent | 指定额外的User-Agent信息 | setUserAgent(‘user identifier’) |
常见问题
如果您希望通过与OSS同地域的其他阿里云产品访问OSS,如何提升传输速度?
如何查看RAM用户的AK信息?
如果遇到报错问题该如何查询具体的错误类型?
相关文档
关于配置客户端的更多内容,请参见开发者指南。