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簽名(不推薦)
阿里雲Object Storage Service自2024年12月1日起不再對新使用者(即新UID )開放使用V1簽名,並將於2025年06月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
在Elastic Compute Service上,您可以通過執行個體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();
}
配置Proxy 伺服器
PHP 5.3及以上版本支援配置Proxy 伺服器。
<?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";
// 設定Proxy 伺服器地址,例如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();
}