OssClient是OSS的PHP客戶端,用于管理存儲空間和文件等OSS資源。使用PHP SDK發起OSS請求時,您需要初始化一個OssClient實例,并根據需要修改默認配置項。
新建OssClient
V4簽名(推薦)
推薦使用更安全的V4簽名算法。使用V4簽名初始化時,除指定Endpoint以外,您還需要指定阿里云通用Region ID作為發起請求地域的標識,示例值為cn-hangzhou
。同時聲明OssClient::OSS_SIGNATURE_VERSION_V4
。OSS PHP SDK 2.7.0及以上版本支持V4簽名。
以使用OSS域名新建OssClient時使用V4簽名為例,其他通過自定義域名、STS等新建OssClient的場景可參考以下示例執行相應修改。
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
try {
// 從環境變量中獲取訪問憑證,并保存在provider中。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$provider = new EnvironmentVariableCredentialsProvider();
// 填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// 填寫Endpoint對應的Region信息,例如cn-hangzhou。
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
return;
}
V1簽名(不推薦)
阿里云對象存儲OSS自2025年03月01日起不再對新用戶(即新UID )開放使用V1簽名,并將于2025年09月01日起停止更新與維護且不再對新增Bucket開放使用V1簽名。請盡快切換到V4簽名,避免影響服務。更多信息,請參見公告說明。
使用OSS域名新建OssClient
以下代碼使用OSS域名新建OssClient。關于不同地域的OSS域名,請參見OSS地域和訪問域名。
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$provider = new EnvironmentVariableCredentialsProvider();
// Endpoint以杭州為例,其它Region請按實際情況填寫。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}
使用自定義域名新建OssClient
以下代碼使用自定義域名新建OssClient。關于使用自定義域名訪問OSS的更多信息,請參見綁定自定義域名至Bucket默認域名。
使用自定義域名時,無法使用listBuckets方法。
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$provider = new EnvironmentVariableCredentialsProvider();
// 填寫自定義域名,例如http://example.com。
$endpoint = "http://example.com";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"cname" => true
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}
使用STS新建OssClient
以下代碼用于使用STS新建一個OssClient。
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
// 運行本代碼示例之前,請確保已在環境變量中配置STS的訪問密鑰(AccessKey ID和AccessKey Secret)和安全令牌(SecurityToken)。
$provider = new EnvironmentVariableCredentialsProvider();
// Endpoint以杭州為例,其它Region請按實際情況填寫。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}
使用EcsRamRole新建OssClient
在云服務器ECS上,您可以通過實例RAM角色的方式訪問OSS。實例RAM角色允許您將一個角色關聯到云服務器實例,在實例內部基于臨時憑證STS訪問OSS。臨時憑證由系統自動生成和更新,應用程序可以使用指定的實例元數據URL獲取臨時憑證。
使用EcsRamRole新建OssClient之前,您需要執行以下命令通過composer的方式安裝SDK。
composer require alibabacloud/credentials
以下代碼用于使用EcsRamRole新建OssClient。
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\CredentialsProvider;
use AlibabaCloud\Credentials\Credential;
use OSS\Credentials\StaticCredentialsProvider;
use OSS\Core\OssException;
use OSS\OssClient;
class AlibabaCloudCredentialsWrapper implements CredentialsProvider{
/**
* @var \OSS\Credentials\Credentials
*/
private $wrapper;
public function __construct($wrapper){
$this->wrapper = $wrapper;
}
public function getCredentials(){
$ak = $this->wrapper->getAccessKeyId();
$sk = $this->wrapper->getAccessKeySecret();
$token = $this->wrapper->getSecurityToken();
return new StaticCredentialsProvider($ak, $sk, $token);
}
}
$ecsRamRole = new Credential(array(
// 填寫Credential類型,固定值為ecs_ram_role。
'type' => 'ecs_ram_role',
// 填寫角色名稱。
'role_name' => 'EcsRamRoleOssTest',
));
$providerWarpper = new AlibabaCloudCredentialsWrapper($ecsRamRole);
$provider = $providerWarpper->getCredentials();
$config = array(
'provider' => $provider,
// 以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其他Region請按實際情況填寫。
'endpoint'=> 'https://oss-cn-hangzhou.aliyuncs.com'
);
try {
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}
使用STSAssumeRole新建OssClient
使用STSAssumeRole新建OssClient之前,您需要執行以下命令通過composer的方式安裝SDK。
composer require alibabacloud/credentials
以下代碼用于使用STSAssumeRole新建OssClient。
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\CredentialsProvider;
use AlibabaCloud\Credentials\Credential;
use OSS\Credentials\StaticCredentialsProvider;
use OSS\Core\OssException;
use OSS\OssClient;
class AlibabaCloudCredentialsWrapper implements CredentialsProvider{
/**
* @var \OSS\Credentials\Credentials
*/
private $wrapper;
public function __construct($wrapper){
$this->wrapper = $wrapper;
}
public function getCredentials(){
$ak = $this->wrapper->getAccessKeyId();
$sk = $this->wrapper->getAccessKeySecret();
$token = $this->wrapper->getSecurityToken();
return new StaticCredentialsProvider($ak, $sk, $token);
}
}
$ramRoleArn = new Credential(array(
// 填寫Credential類型,固定值為ram_role_arn。
'type' => 'ram_role_arn',
// 運行本代碼示例之前,請確保已使用RAM用戶的訪問密鑰設置環境變量YOUR_ACCESS_KEY_ID和YOUR_ACCESS_KEY_SECRET。
'access_key_id' => getenv('YOUR_ACCESS_KEY_ID'),
'access_key_secret' => getenv('YOUR_ACCESS_KEY_SECRET'),
// 填寫角色的ARN信息,即需要扮演的角色ID。格式為acs:ram::$accountID:role/$roleName。
'role_arn' => 'acs:ram::17464958********:role/ossststest',
// 自定義角色會話名稱,用于區分不同的令牌。
'role_session_name' => 'yourRoleSessionName',
// 自定義權限策略。
'policy' => '',
));
$providerWarpper = new AlibabaCloudCredentialsWrapper($ramRoleArn);
$provider = $providerWarpper->getCredentials();
$config = array(
'provider' => $provider,
// 以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其他Region請按實際情況填寫。
'endpoint'=> 'https://oss-cn-hangzhou.aliyuncs.com'
);
try {
$ossClient = new OssClient($config);
var_dump($ossClient);
} catch (OssException $e) {
print $e->getMessage();
}
配置OssClient
您可以通過OssClient配置代理、連接超時、最大連接數等參數。
參數 | 描述 | 方法 |
timeout | 設置Socket層傳輸數據的超時時間 ,默認值為5184000,單位為秒。 | $ossClient->setTimeout(60); |
connectTimeout | 設置建立連接的超時時間,默認值為10,單位為秒。 | $ossClient->setConnectTimeout(600); |
maxRetries | 請求失敗后最大的重試次數。默認3次。 | $ossClient->setMaxTries(5); |
useSSL | 是否開啟SSL證書校驗。取值如下:
| $ossClient->setUseSSL(true); |
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$provider = new EnvironmentVariableCredentialsProvider();
// Endpoint以杭州為例,其它Region請按實際情況填寫。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// 設置建立連接的超時時間。
$ossClient->setConnectTimeout(300);
// 設置失敗請求重試次數。
$ossClient->setMaxTries(5);
// 設置Socket層傳輸數據的超時時間。
$ossClient->setTimeout(30);
// 設置是否開啟SSL證書校驗。
$ossClient->setUseSSL(true);
} catch (OssException $e) {
print $e->getMessage();
}
配置代理服務器
PHP 5.3及以上版本支持配置代理服務器。
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
// 運行本代碼示例之前,請確保已在環境變量中配置STS的訪問密鑰(AccessKey ID和AccessKey Secret)和安全令牌(SecurityToken)。
$provider = new EnvironmentVariableCredentialsProvider();
// Endpoint以杭州為例,其它Region請按實際情況填寫。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 設置代理服務器地址,例如http://<用戶名>:<密碼>@<代理ip>:<代理端口>。
$request_proxy = "yourRequestProxy"
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"request_proxy"=> $request_proxy,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}