OssClient adalah klien PHP untuk Object Storage Service (OSS) yang dapat digunakan untuk mengelola resource OSS, seperti bucket dan file. Untuk mengirim permintaan ke OSS menggunakan kit pengembangan perangkat lunak (SDK) PHP, Anda harus menginisialisasi instans OssClient dan menyesuaikan konfigurasi default-nya sesuai kebutuhan.
Buat OssClient
Signature V4 (Direkomendasikan)
Gunakan algoritma Signature V4 yang lebih aman. Saat menginisialisasi klien dengan Signature V4, Anda harus menentukan titik akhir (endpoint) dan ID wilayah umum Alibaba Cloud. ID wilayah tersebut mengidentifikasi wilayah tempat permintaan berasal—misalnya, cn-hangzhou. Anda juga harus mendeklarasikan OssClient::OSS_SIGNATURE_VERSION_V4. OSS PHP SDK versi 2.7.0 dan yang lebih baru mendukung Signature V4.
Kode berikut menunjukkan contoh cara membuat OssClient menggunakan nama domain OSS dan Signature V4. Untuk skenario lain, seperti pembuatan OssClient menggunakan nama domain kustom atau Security Token Service (STS), Anda dapat menyesuaikan kode pada contoh ini.
<?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 {
// Dapatkan kredensial akses dari variabel lingkungan dan simpan ke penyedia. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi 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,
// Tentukan wilayah yang sesuai dengan titik akhir. Misalnya, tentukan cn-hangzhou.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
return;
}Signature V1 (Tidak direkomendasikan)
Mulai 1 Maret 2025, algoritma signature V1 OSS tidak lagi tersedia bagi pelanggan baru dengan UID baru. Mulai 1 September 2025, OSS tidak lagi memperbarui dan memelihara algoritma signature V1, serta algoritma tersebut tidak lagi tersedia untuk bucket baru. Segera tingkatkan dari signature V1 ke signature V4 untuk mencegah dampak terhadap bisnis Anda.
Buat OssClient menggunakan nama domain OSS
Kode berikut menunjukkan contoh cara membuat OssClient menggunakan nama domain OSS. Untuk informasi selengkapnya mengenai nama domain OSS di berbagai wilayah, lihat Wilayah dan titik akhir.
<?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;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
$provider = new EnvironmentVariableCredentialsProvider();
// Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir sesuai wilayah Anda yang sebenarnya.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}
Buat OssClient menggunakan nama domain kustom
Kode berikut menunjukkan contoh cara membuat OssClient menggunakan nama domain kustom. Untuk informasi selengkapnya mengenai cara mengakses OSS menggunakan nama domain kustom, lihat Akses OSS menggunakan nama domain kustom.
Anda tidak dapat menggunakan metode listBuckets dengan nama domain kustom.
<?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;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan nama domain kustom. Misalnya, 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();
}
Buat OssClient menggunakan STS
Kode berikut menunjukkan contoh cara membuat OssClient menggunakan STS.
<?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;
// Sebelum menjalankan kode contoh ini, pastikan pasangan Kunci Akses (ID AccessKey dan Rahasia AccessKey) serta token keamanan STS telah dikonfigurasi dalam variabel lingkungan.
$provider = new EnvironmentVariableCredentialsProvider();
// Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir sesuai wilayah Anda yang sebenarnya.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
);
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}
Buat OssClient menggunakan instance RAM role
Anda dapat mengakses OSS dari instans Elastic Compute Service (ECS) menggunakan instance RAM role. Instance RAM role memungkinkan Anda mengaitkan suatu peran dengan instans ECS sehingga Anda dapat mengakses OSS dari dalam instans tersebut menggunakan kredensial sementara dari STS. Sistem secara otomatis menghasilkan dan memperbarui kredensial sementara tersebut, yang dapat diambil oleh aplikasi Anda dari URL metadata instans tertentu.
Sebelum membuat OssClient menggunakan instance RAM role, Anda harus menjalankan perintah berikut untuk menginstal SDK dengan Composer.
composer require alibabacloud/credentialsKode berikut menunjukkan contoh cara membuat OssClient menggunakan instance RAM role.
<?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(
// Tentukan jenis kredensial. Nilainya tetap ecs_ram_role.
'type' => 'ecs_ram_role',
// Tentukan nama peran.
'role_name' => 'EcsRamRoleOssTest',
));
$providerWarpper = new AlibabaCloudCredentialsWrapper($ecsRamRole);
$provider = $providerWarpper->getCredentials();
$config = array(
'provider' => $provider,
// Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Atur menjadi https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan titik akhir yang sebenarnya.
'endpoint'=> 'https://oss-cn-hangzhou.aliyuncs.com'
);
try {
$ossClient = new OssClient($config);
} catch (OssException $e) {
print $e->getMessage();
}Buat OssClient menggunakan STSAssumeRole
Sebelum membuat OssClient menggunakan STSAssumeRole, Anda harus menjalankan perintah berikut untuk menginstal SDK dengan Composer.
composer require alibabacloud/credentialsKode berikut menunjukkan contoh cara membuat OssClient menggunakan STSAssumeRole.
<?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(
// Tentukan jenis kredensial. Nilainya tetap ram_role_arn.
'type' => 'ram_role_arn',
// Sebelum menjalankan kode contoh ini, pastikan Anda telah menggunakan pasangan Kunci Akses Pengguna RAM untuk mengatur variabel lingkungan YOUR_ACCESS_KEY_ID dan YOUR_ACCESS_KEY_SECRET.
'access_key_id' => getenv('YOUR_ACCESS_KEY_ID'),
'access_key_secret' => getenv('YOUR_ACCESS_KEY_SECRET'),
// Tentukan Nama Sumber Daya Alibaba Cloud (ARN) dari peran yang akan diasumsikan. Formatnya adalah acs:ram::$accountID:role/$roleName.
'role_arn' => 'acs:ram::17464958********:role/ossststest',
// Tentukan nama sesi peran kustom untuk membedakan token yang berbeda.
'role_session_name' => 'yourRoleSessionName',
// Tentukan kebijakan kustom.
'policy' => '',
));
$providerWarpper = new AlibabaCloudCredentialsWrapper($ramRoleArn);
$provider = $providerWarpper->getCredentials();
$config = array(
'provider' => $provider,
// Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Atur menjadi https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, tentukan titik akhir yang sebenarnya.
'endpoint'=> 'https://oss-cn-hangzhou.aliyuncs.com'
);
try {
$ossClient = new OssClient($config);
var_dump($ossClient);
} catch (OssException $e) {
print $e->getMessage();
}Konfigurasikan OssClient
Anda dapat mengonfigurasi parameter OssClient, seperti server proxy, waktu tunggu koneksi (connection timeout), dan jumlah koneksi maksimum.
Parameter | Deskripsi | Metode |
timeout | Periode timeout untuk transmisi data di lapisan socket. Nilai default adalah 5184000. Satuan: detik. | $ossClient->setTimeout(60); |
connectTimeout | Periode timeout untuk membangun koneksi. Nilai default adalah 10. Satuan: detik. | $ossClient->setConnectTimeout(600); |
maxRetries | Jumlah maksimum percobaan ulang untuk permintaan yang gagal. Nilai default adalah 3. | $ossClient->setMaxTries(5); |
useSSL | Menentukan apakah verifikasi sertifikat SSL diaktifkan. Nilai yang valid:
| $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;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
$provider = new EnvironmentVariableCredentialsProvider();
// Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir sesuai wilayah Anda yang sebenarnya.
$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);
// Atur periode timeout koneksi.
$ossClient->setConnectTimeout(300);
// Atur jumlah maksimum percobaan ulang untuk permintaan yang gagal.
$ossClient->setMaxTries(5);
// Atur periode timeout untuk transmisi data di lapisan socket.
$ossClient->setTimeout(30);
// Tentukan apakah verifikasi sertifikat SSL diaktifkan.
$ossClient->setUseSSL(true);
} catch (OssException $e) {
print $e->getMessage();
} Konfigurasikan server proxy
Versi PHP 5.3 dan yang lebih baru mendukung konfigurasi server 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;
// Sebelum menjalankan kode contoh ini, pastikan pasangan Kunci Akses (ID AccessKey dan Rahasia AccessKey) serta token keamanan STS telah dikonfigurasi dalam variabel lingkungan.
$provider = new EnvironmentVariableCredentialsProvider();
// Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir sesuai wilayah Anda yang sebenarnya.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Atur alamat server proxy. Misalnya, http://<username>:<password>@<proxy_ip>:<proxy_port>.
$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();
}