全部产品
Search
文档中心

Object Storage Service:OSS SDK for PHP 2.0

更新时间:Dec 18, 2025

GitHubPanduan Pengembang OSS SDK for PHP 2.0Rilis SDK

Integrasi cepat

Untuk mengintegrasikan OSS SDK for PHP 2.0, ikuti langkah-langkah berikut:

image

Prasyarat

Diperlukan PHP 7.4 atau versi yang lebih baru. Untuk informasi selengkapnya, kunjungi situs resmi Composer untuk mengunduh alat manajemen paket Composer.

Anda dapat menjalankan perintah php -version untuk memeriksa versi PHP. Jika PHP belum diinstal atau versinya lebih lama dari 7.4, Anda dapat mengunduh dan menginstal PHP.

Instal SDK

  1. Buat direktori proyek, lalu jalankan perintah berikut untuk menggunakan Composer guna mendapatkan OSS SDK for PHP 2.0. Pilih versi OSS SDK for PHP 2.0 sesuai kebutuhan Anda. Kami menyarankan agar Anda menggunakan versi terbaru agar kode contoh dalam topik ini berjalan sebagaimana mestinya.

    mkdir oss-php-example && cd oss-php-example && composer require alibabacloud/oss-v2
  2. Gunakan kode berikut untuk mengimpor paket OSS SDK for PHP 2.0.

    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;

Konfigurasikan kredensial akses

Gunakan Pasangan Kunci Akses (AccessKey pair) dari Pengguna RAM untuk mengonfigurasi kredensial akses.

  1. Di Konsol RAM, buat Pengguna RAM yang menggunakan AccessKey Pair permanen untuk akses. Simpan AccessKey pair tersebut dan berikan izin AliyunOSSFullAccess kepada Pengguna RAM.

  2. Gunakan AccessKey pair dari Pengguna RAM untuk mengonfigurasi variabel lingkungan.

    Linux

    1. Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file ~/.bashrc.

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. Jalankan perintah berikut untuk menerapkan perubahan.

        source ~/.bashrc
      2. Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah dikonfigurasi.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. Jalankan perintah berikut di terminal untuk melihat jenis shell default.

      echo $SHELL
      1. Lakukan langkah-langkah berikut berdasarkan jenis shell default.

        Zsh

        1. Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file ~/.zshrc.

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. Jalankan perintah berikut untuk menerapkan perubahan.

          source ~/.zshrc
        3. Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah dikonfigurasi.

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file ~/.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
        2. Jalankan perintah berikut untuk menerapkan perubahan.

          source ~/.bash_profile
        3. Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah dikonfigurasi.

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. Jalankan perintah berikut di jendela Command Prompt.

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah dikonfigurasi.

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. Jalankan perintah berikut di 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)
      1. Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah dikonfigurasi.

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

Inisialisasi klien

Inisialisasi OSSClient dengan menentukan wilayah dan titik akhir. Kemudian, jalankan kode uji coba.

<?php

/**
 * Panduan lengkap konfigurasi klien OSS SDK for PHP 2.0
 *
 * ===========================================
 * Konfigurasi signature V4 dan wilayah
 * ===========================================
 * • OSS SDK for PHP 2.0 menggunakan algoritma signature V4 secara default.
 * • Saat menginisialisasi klien, Anda harus menentukan ID wilayah Alibaba Cloud untuk mengidentifikasi wilayah permintaan.
 * • Contoh ini menggunakan ID wilayah China (Hangzhou): cn-hangzhou. Untuk ID wilayah lainnya, lihat Wilayah dan titik akhir.
 *
 * ===========================================
 * Konfigurasi titik akhir
 * ===========================================
 * • OSS SDK for PHP 2.0 memungkinkan Anda menyesuaikan titik akhir untuk permintaan layanan menggunakan parameter endpoint.
 * • Jika Anda tidak menentukan titik akhir, SDK akan membuat titik akhir publik berdasarkan informasi wilayah.
 * • Misalnya, jika wilayah adalah 'cn-hangzhou', titik akhir yang dibuat adalah 'https://oss-cn-hangzhou.aliyuncs.com'.
 *
 * ===========================================
 * Pemilihan protokol
 * ===========================================
 * • OSS SDK for PHP 2.0 menggunakan protokol HTTPS secara default saat membuat titik akhir. Ini adalah protokol yang direkomendasikan.
 * • Untuk menggunakan protokol HTTP, tentukan http secara eksplisit saat mengatur titik akhir.
 * • Contoh HTTPS: 'https://oss-cn-hangzhou.aliyuncs.com'
 * • Contoh HTTP: 'http://oss-cn-hangzhou.aliyuncs.com'
 */

// Impor file autoload untuk memastikan dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# Muat konfigurasi SDK default dan atur penyedia kredensial.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

// Metode 1: Tentukan hanya wilayah (direkomendasikan). SDK secara otomatis membuat titik akhir HTTPS.
// China (Hangzhou): cn-hangzhou
$cfg->setRegion(region: "cn-hangzhou");

// // Metode 2: Tentukan wilayah dan titik akhir.
// $cfg->setRegion(region: 'cn-hangzhou')->setEndpoint(endpoint: 'https://oss-cn-hangzhou.aliyuncs.com');

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Data yang akan diunggah.
$data = 'Hello OSS';

// Buat objek PutObjectRequest untuk mengunggah objek.
$request = new Oss\Models\PutObjectRequest(
                bucket: "Your Bucket Name",
                key: "Your Object Key",
            );
$request->body = Oss\Utils::streamFor($data); // Atur badan permintaan menjadi aliran data.

// Lakukan operasi unggah.
$result = $client->putObject($request);

// Cetak hasil unggah.
printf(
    'status code: %s' . PHP_EOL . // Kode status HTTP.
    'request id: %s' . PHP_EOL .  // ID permintaan.
    'etag: %s' . PHP_EOL,         // ETag objek.
    $result->statusCode,
    $result->requestId,
    $result->etag
);

Setelah menjalankan kode, hasil berikut dikembalikan, yang menunjukkan bahwa file berhasil diunggah.

status code: 200
request id: 687F2BEEDC44E0313527BA07
etag: "F0F18C2C66AE1DD512BDCD4366F76DA3"

Konfigurasi klien

Apa saja konfigurasi klien yang didukung?

Parameter

Deskripsi

Contoh

region

(Wajib) Wilayah tempat permintaan dikirim.

setRegion("cn-hangzhou")

credentialsProvider

(Wajib) Kredensial akses.

setCredentialsProvider(provider)

endpoint

Titik akhir.

setEndpoint("oss-cn-hanghzou.aliyuncs.com")

retryMaxAttempts

Jumlah maksimum percobaan ulang untuk permintaan HTTP. Nilai default adalah 3.

setRetryMaxAttempts(5)

retryer

Implementasi percobaan ulang untuk permintaan HTTP.

setRetryer(customRetryer)

connectTimeout

Periode timeout untuk membuat koneksi. Nilai default adalah 10 detik.

setConnectTimeout(5* time.Second)

readWriteTimeout

Periode timeout untuk membaca dan menulis data. Nilai default adalah 20 detik.

setReadWriteTimeout(30 * time.Second)

insecureSkipVerify

Menentukan apakah verifikasi sertifikat SSL dilewati. Secara default, sertifikat SSL diverifikasi.

setInsecureSkipVerify(true)

enabledRedirect

Menentukan apakah pengalihan HTTP diaktifkan. Secara default, fitur ini dinonaktifkan.

setEnabledRedirect(true)

proxyHost

Atur server proxy

setProxyHost(‘http://user:passswd@proxy.example-***.com’)

signatureVersion

Versi signature. Nilai default adalah v4.

setSignatureVersion("v1")

disableSSL

Menentukan apakah menggunakan permintaan HTTPS. Secara default, HTTPS digunakan.

setDisableSSL(true)

usePathStyle

Menentukan apakah menggunakan URL bergaya path. Secara default, URL bergaya virtual hosted digunakan.

setUsePathStyle(true)

useCName

Menentukan apakah menggunakan nama domain kustom. Secara default, nama domain kustom tidak digunakan.

setUseCName(true)

useDualStackEndpoint

Menentukan apakah menggunakan titik akhir dual-stack. Secara default, titik akhir dual-stack tidak digunakan.

setUseDualStackEndpoint(true)

useAccelerateEndpoint

Menentukan apakah menggunakan titik akhir percepatan. Secara default, titik akhir percepatan tidak digunakan.

setUseAccelerateEndpoint(true)

useInternalEndpoint

Menentukan apakah menggunakan titik akhir internal. Secara default, titik akhir internal tidak digunakan.

setUseInternalEndpoint(true)

additionalHeaders

Header permintaan tambahan yang akan ditandatangani. Parameter ini hanya berlaku untuk signature V4.

setAdditionalHeaders([‘content-length’])

userAgent

Informasi User-Agent tambahan.

setUserAgent(‘user identifier’)

Gunakan nama domain kustom

Jika Anda menggunakan titik akhir OSS default, Anda mungkin mengalami masalah seperti tidak dapat mengakses atau melihat pratinjau file. Untuk mengatasi hal ini, Anda dapat mengakses OSS menggunakan nama domain kustom. Metode ini memungkinkan Anda melihat pratinjau file di browser dan menggunakan CDN Alibaba Cloud untuk mempercepat pengiriman konten.

<?php

// Impor file autoload untuk memastikan dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# Muat konfigurasi SDK default dan atur penyedia kredensial.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // Atur penyedia kredensial.

// Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
// Tentukan nama domain kustom Anda, misalnya www.example-***.com. Perhatikan bahwa Anda harus mengatur setUseCname ke true untuk mengaktifkan opsi CNAME. Jika tidak, Anda tidak dapat menggunakan nama domain kustom.
// Untuk memanggil operasi PutCname, Anda harus menggunakan PHP 8 atau versi yang lebih baru.
$cfg->setRegion('cn-hangzhou')->setEndpoint('www.example-***.com')->setUseCname(true);

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Kontrol timeout

<?php

// Impor file autoload untuk memastikan dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# Muat konfigurasi SDK default dan atur penyedia kredensial.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // Atur penyedia kredensial.

// Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
$cfg->setRegion(region: "cn-hangzhou");

# Atur periode timeout koneksi.
$cfg->setConnectTimeout(connectTimeout: 30);

# Atur periode timeout untuk membaca dan menulis data.
$cfg->setReadwriteTimeout(readwriteTimeout:30);

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Jumlah maksimum percobaan ulang

Jika permintaan gagal, OSSClient secara default mencoba ulang permintaan tersebut tiga kali.

Dalam skenario konkurensi tinggi atau jaringan tidak stabil, Anda dapat menggunakan setRetryMaxAttempts untuk meningkatkan jumlah percobaan ulang guna meningkatkan tingkat keberhasilan permintaan.

<?php

// Impor file autoload untuk memastikan dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# Muat konfigurasi SDK default dan atur penyedia kredensial.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

// China (Hangzhou): cn-hangzhou
$cfg->setRegion(region: "cn-hangzhou");

// Atur jumlah maksimum percobaan ulang untuk permintaan HTTP. Nilai default adalah 3.
$cfg->setRetryMaxAttempts(5);

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Protokol HTTP/HTTPS

Anda dapat menggunakan setDisableSSL(true) untuk menonaktifkan protokol HTTPS.

<?php

// Impor file autoload untuk memastikan dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# Muat konfigurasi SDK default dan atur penyedia kredensial.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

// China (Hangzhou): cn-hangzhou
$cfg->setRegion(region: "cn-hangzhou");

// Nonaktifkan SSL.
$cfg->setDisableSSL(true);

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Gunakan korutin dalam framework Swoole

Kode berikut memberikan contoh cara membuat klien OSS yang mendukung korutin berdasarkan framework Swoole.

<?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;

// Konfigurasikan klien OSS.
$region = 'cn-hangzhou'; // Wilayah OSS.
$bucket = 'bucket-name'; // Bucket tujuan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); // Muat kredensial dari variabel lingkungan.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // Atur penyedia kredensial.
$cfg->setRegion(region: $region); // Atur wilayah.
$cfg->setEndpoint(endpoint: 'http://oss-cn-hangzhou.aliyuncs.com'); // Atur titik akhir.

// Buat klien OSS yang mendukung korutin.
$client = new Oss\Client(config: $cfg, options: ['handler' => HandlerStack::create(handler: new CoroutineHandler())]);

// Tugas korutin 1: Unggah swoole.txt.
co(function () use ($client, $bucket) {
    try {
        $key = 'swoole.txt'; // Nama objek.
        $data = 'Hello OSS'; // Konten objek.
        $request = new Oss\Models\PutObjectRequest($bucket, $key); // Buat permintaan unggah.
        $request->body = Oss\Utils::streamFor($data); // Atur badan permintaan.
        $result = $client->putObject(request: $request); // Lakukan unggah.
        echo "Hasil Tugas 1:\n" . var_export($result, true) . "\n"; // Cetak hasil.
    } catch (\Exception $e) {
        echo "Kesalahan Tugas 1: " . $e->getMessage() . "\n"; // Tangkap pengecualian.
    }
});

// Tugas korutin 2: Unggah hyperf.txt.
co(function () use ($client, $bucket) {
    try {
        $key = 'hyperf.txt'; // Nama objek.
        $data = 'Hello OSS'; // Konten objek.
        $request = new Oss\Models\PutObjectRequest($bucket, $key); // Buat permintaan unggah.
        $request->body = Oss\Utils::streamFor($data); // Atur badan permintaan.
        $result = $client->putObject($request); // Lakukan unggah.
        echo "Hasil Tugas 2:\n" . var_export($result, true) . "\n"; // Cetak hasil.
    } catch (\Exception $e) {
        echo "Kesalahan Tugas 2: " . $e->getMessage() . "\n"; // Tangkap pengecualian.
    }
});

Gunakan titik akhir internal

Jika aplikasi Anda dideploy pada Instance ECS Alibaba Cloud dan perlu sering mengakses sumber daya OSS di wilayah yang sama, Anda dapat menggunakan titik akhir internal untuk mengurangi biaya trafik dan meningkatkan kecepatan akses.

<?php

// Impor file autoload untuk memastikan dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# Muat konfigurasi SDK default dan atur penyedia kredensial.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // Atur penyedia kredensial.

// Metode 1: Tentukan wilayah dan atur setUseInternalEndpoint ke true.
// Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
$cfg->setRegion('cn-hangzhou')->setUseInternalEndpoint(true);

// // Metode 2: Langsung tentukan wilayah dan titik akhir.
// // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
// // Tentukan titik akhir internal wilayah bucket. Misalnya, untuk China (Hangzhou), atur titik akhir ke 'https://oss-cn-hangzhou-internal.aliyuncs.com'.
// // Untuk menggunakan protokol HTTP, atur titik akhir ke 'http://oss-cn-hangzhou-internal.aliyuncs.com'.
// $cfg->setRegion('cn-hangzhou')->setEndpoint('https://oss-cn-hanghzou-internal.aliyuncs.com');

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Gunakan titik akhir percepatan

<?php

// Impor file autoload untuk memastikan dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# Muat konfigurasi SDK default dan atur penyedia kredensial.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // Atur penyedia kredensial.

// Metode 1: Tentukan wilayah dan atur setUseAccelerateEndpoint ke true.
// Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
$cfg->setRegion('cn-hangzhou')->setUseAccelerateEndpoint(true);

// // Metode 2: Langsung tentukan wilayah dan titik akhir.
// // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
// // Tentukan titik akhir percepatan wilayah bucket. Misalnya, untuk China (Hangzhou), atur titik akhir ke 'https://oss-accelerate.aliyuncs.com'.
// $cfg->setRegion('cn-hangzhou')->setEndpoint('https://oss-accelerate.aliyuncs.com');

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Gunakan domain privat

<?php

// Impor file autoload untuk memastikan dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# Muat konfigurasi SDK default dan atur penyedia kredensial.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // Atur penyedia kredensial.

// Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
// Tentukan domain privat Anda. Contoh: https://service.corp.example.com
$cfg->setRegion('cn-hangzhou')->setEndpoint('https://service.corp.example.com');

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Gunakan titik akhir Alibaba Gov Cloud

Kode berikut memberikan contoh cara mengonfigurasi OSSClient menggunakan titik akhir Alibaba Gov Cloud.

<?php

// Impor file autoload untuk memastikan dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# Muat konfigurasi SDK default dan atur penyedia kredensial.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // Atur penyedia kredensial.

// Tentukan wilayah tempat bucket berada. Misalnya, untuk Alibaba Gov Cloud 1 China (Beijing), atur wilayah ke cn-north-2-gov-1.
// Tentukan titik akhir internal wilayah bucket. Misalnya, untuk Alibaba Gov Cloud 1 China (Beijing), atur titik akhir ke 'https://oss-cn-north-2-gov-1-internal.aliyuncs.com'.
// Untuk menggunakan protokol HTTP, atur titik akhir ke 'http://oss-cn-north-2-gov-1-internal.aliyuncs.com'.
$cfg->setRegion('cn-north-2-gov-1')->setEndpoint('https://oss-cn-north-2-gov-1-internal.aliyuncs.com');

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Konfigurasi kredensial akses

OSS menyediakan beberapa metode untuk menginisialisasi kredensial. Anda dapat memilih metode berdasarkan kebutuhan autentikasi dan otorisasi Anda.

Bagaimana cara memilih kredensial akses?

Metode inisialisasi penyedia kredensial

Skenario

Memerlukan AccessKey pair atau token STS yang sudah ada

Kredensial dasar

Periode validitas kredensial

Metode rotasi atau refresh kredensial

Gunakan AccessKey pair dari Pengguna RAM

Aplikasi yang dideploy di lingkungan aman dan stabil serta tidak rentan terhadap serangan eksternal. Aplikasi ini memerlukan akses jangka panjang ke layanan Alibaba Cloud tanpa rotasi kredensial yang sering.

Ya

AccessKey pair

Jangka panjang

Rotasi manual

Gunakan token STS

Aplikasi yang dideploy di lingkungan tidak tepercaya. Anda ingin mengontrol periode validitas dan izin untuk akses.

Ya

Token STS

Sementara

Refresh manual

Gunakan ARN peran RAM

Aplikasi yang memerlukan akses berotorisasi ke layanan Alibaba Cloud, seperti akses lintas akun.

Ya

Token STS

Sementara

Auto-refresh

Gunakan peran RAM instans

Aplikasi yang dideploy pada Instance ECS, Instance ECI, atau node pekerja Container Service for Kubernetes.

Tidak

Token STS

Sementara

Auto-refresh

Gunakan ARN peran OIDC

Aplikasi tidak tepercaya yang dideploy pada node pekerja Container Service for Kubernetes.

Tidak

Token STS

Sementara

Auto-refresh

Penyedia kredensial kustom

Jika metode konfigurasi kredensial di atas tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikan metode untuk mendapatkan kredensial.

Kustom

Kustom

Kustom

Kustom

Gunakan AccessKey pair dari Pengguna RAM

Anda dapat menginisialisasi penyedia kredensial menggunakan AccessKey pair (ID AccessKey dan Rahasia AccessKey) dari Akun Alibaba Cloud atau Pengguna RAM. Metode ini cocok jika aplikasi Anda dideploy di lingkungan aman dan stabil, tidak rentan terhadap serangan eksternal, memerlukan akses jangka panjang ke OSS, dan tidak dapat sering melakukan rotasi kredensial. Perhatikan bahwa metode ini mengharuskan Anda memelihara AccessKey pair secara manual, yang meningkatkan risiko keamanan dan kompleksitas pemeliharaan.

Peringatan
  • Akun Alibaba Cloud memiliki izin penuh atas semua sumber daya. Kebocoran AccessKey pair Akun Alibaba Cloud menimbulkan risiko signifikan bagi sistem Anda. Kami menyarankan agar Anda menggunakan AccessKey pair dari Pengguna RAM yang diberikan izin minimum yang diperlukan.

  • Untuk informasi selengkapnya tentang cara membuat AccessKey pair untuk Pengguna RAM, lihat Buat AccessKey pair. ID AccessKey dan Rahasia AccessKey Pengguna RAM hanya ditampilkan saat AccessKey pair dibuat. Anda harus segera menyimpannya. Jika Anda lupa AccessKey pair tersebut, buat yang baru untuk rotasi.

Variabel lingkungan

  1. Gunakan AccessKey pair dari Pengguna RAM untuk mengonfigurasi variabel lingkungan.

    Linux

    1. Jalankan perintah berikut di CLI untuk menambahkan konfigurasi variabel lingkungan ke file ~/.bashrc:

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. Terapkan perubahan.

        source ~/.bashrc
      2. Periksa apakah variabel lingkungan telah berlaku:

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. Jalankan perintah berikut di terminal untuk melihat jenis shell default:

      echo $SHELL
      1. Konfigurasikan variabel lingkungan berdasarkan jenis shell default.

        Zsh

        1. Jalankan perintah berikut untuk menambahkan konfigurasi variabel lingkungan ke file ~/.zshrc:

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. Terapkan perubahan.

          source ~/.zshrc
        3. Periksa apakah variabel lingkungan telah berlaku:

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. Jalankan perintah berikut untuk menambahkan konfigurasi variabel lingkungan ke file ~/.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
        2. Terapkan perubahan.

          source ~/.bash_profile
        3. Periksa apakah variabel lingkungan telah berlaku:

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. Jalankan perintah berikut di CMD:

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. Periksa apakah variabel lingkungan berlaku:

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. Jalankan perintah berikut di 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)
      1. Periksa apakah variabel lingkungan berlaku:

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. Setelah mengubah variabel lingkungan sistem, Anda harus me-restart atau merefresh lingkungan pengembangan Anda untuk memastikan variabel lingkungan sistem terbaru dimuat. Ini termasuk IDE, antarmuka baris perintah, aplikasi desktop lainnya, dan layanan backend.

  3. Gunakan variabel lingkungan untuk meneruskan informasi kredensial.

    <?php
    
    // Impor file autoload untuk memastikan dependensi dimuat dengan benar.
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    
    # Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
    $region = "cn-hangzhou";
    
    // Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
    $credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
    
    // Gunakan konfigurasi SDK default.
    $cfg = Oss\Config::loadDefault();
    $cfg->setCredentialsProvider($credentialsProvider); // Atur penyedia kredensial.
    $cfg->setRegion($region); // Atur wilayah tempat bucket berada.
    
    // Buat instance klien OSS.
    $client = new Oss\Client($cfg);
    
    // Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Kredensial statis

Kode contoh berikut menunjukkan cara menyematkan kredensial akses dengan secara eksplisit menyetel AccessKey pair yang akan digunakan.

Peringatan

Jangan menyematkan kredensial akses dalam aplikasi di lingkungan produksi. Metode ini hanya untuk tujuan pengujian.

<?php

// Impor file autoload untuk memastikan dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

# Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
$region = "cn-hangzhou";

# Buat penyedia kredensial statis dan secara eksplisit atur ID AccessKey dan Rahasia AccessKey. Ganti dengan ID AccessKey dan Rahasia AccessKey Pengguna RAM Anda.
$credentialsProvider = new Oss\Credentials\StaticCredentialsProvider("RAM AccessKey ID","RAM AccessKey Secret");

// Gunakan konfigurasi SDK default.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Atur penyedia kredensial.
$cfg->setRegion($region); // Atur wilayah tempat bucket berada.

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Gunakan token STS

Jika aplikasi Anda memerlukan akses sementara ke OSS, Anda dapat menginisialisasi penyedia kredensial menggunakan kredensial identitas sementara (ID AccessKey, Rahasia AccessKey, dan token Layanan Keamanan (STS)) yang diperoleh dari STS. Perhatikan bahwa metode ini mengharuskan Anda memelihara token STS secara manual, yang meningkatkan risiko keamanan dan kompleksitas pemeliharaan. Selain itu, jika Anda ingin mengakses OSS secara sementara beberapa kali, Anda harus merefresh token STS secara manual.

Penting
  • Untuk mendapatkan token STS dengan cepat menggunakan OpenAPI, lihat AssumeRole.

  • Untuk mendapatkan token STS menggunakan SDK, lihat Gunakan token STS untuk mengakses OSS.

  • Perhatikan bahwa token STS memiliki waktu kedaluwarsa yang ditentukan saat token dihasilkan. Setelah token kedaluwarsa, token tersebut menjadi tidak valid dan tidak dapat digunakan.

  • Untuk daftar titik akhir layanan STS, lihat Titik Akhir.

Variabel lingkungan

  1. Atur variabel lingkungan menggunakan kredensial identitas sementara.

    Mac OS X/Linux/Unix

    Peringatan
    • Gunakan kredensial identitas sementara (ID AccessKey, Rahasia AccessKey, dan token STS) yang diperoleh dari STS. Jangan gunakan AccessKey pair dari Pengguna RAM.

    • Perhatikan bahwa ID AccessKey yang diperoleh dari STS diawali dengan "STS", misalnya, "STS.****************".

    export OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    export OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    export OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>

    Windows

    Peringatan
    • Gunakan kredensial identitas sementara (ID AccessKey, Rahasia AccessKey, dan token STS) yang diperoleh dari STS. Jangan gunakan AccessKey pair dari Pengguna RAM.

    • Perhatikan bahwa ID AccessKey yang diperoleh dari STS diawali dengan "STS", misalnya, "STS.****************".

    set OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    set OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    set OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>
  2. Meneruskan informasi kredensial menggunakan variabel lingkungan.

    <?php
    
    // Impor file autoload untuk memastikan dependensi dimuat dengan benar.
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    
    # Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
    $region = "cn-hangzhou";
    
    // Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey, Rahasia AccessKey, dan token STS dari variabel lingkungan.
    $credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
    
    // Gunakan konfigurasi SDK default.
    $cfg = Oss\Config::loadDefault();
    $cfg->setCredentialsProvider($credentialsProvider); // Atur penyedia kredensial.
    $cfg->setRegion($region); // Atur wilayah tempat bucket berada.
    
    // Buat instance klien OSS.
    $client = new Oss\Client($cfg);
    
    // Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Kredensial statis

Anda dapat menyematkan kredensial dalam aplikasi Anda dengan secara eksplisit menyetel AccessKey pair sementara yang akan digunakan.

Peringatan

Jangan menyematkan kredensial akses dalam aplikasi di lingkungan produksi. Metode ini hanya untuk tujuan pengujian.

<?php

// Impor file autoload untuk memastikan dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

# Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
$region = "cn-hangzhou";

# Tentukan ID AccessKey dan Rahasia AccessKey sementara yang Anda peroleh. Jangan gunakan ID AccessKey dan Rahasia AccessKey Akun Alibaba Cloud Anda.
# Perhatikan bahwa ID AccessKey yang diperoleh dari STS diawali dengan STS, seperti pada contoh berikut.
$stsAccessKeyId = 'STS.****************';
$stsAccessKeySecret = 'yourAccessKeySecret';
# Tentukan token STS yang Anda peroleh.
$stsSecurityToken = 'yourSecurityToken';

# Buat penyedia kredensial statis dan secara eksplisit atur ID AccessKey sementara, Rahasia AccessKey, dan token STS.
$credentialsProvider = new Oss\Credentials\StaticCredentialsProvider($stsAccessKeyId, $stsAccessKeySecret, $stsSecurityToken);

// Gunakan konfigurasi SDK default.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Atur penyedia kredensial.
$cfg->setRegion($region); // Atur wilayah tempat bucket berada.

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Gunakan ARN peran RAM

Jika aplikasi Anda memerlukan akses berotorisasi ke OSS, seperti untuk akses lintas akun, Anda dapat menginisialisasi penyedia kredensial menggunakan Nama Sumber Daya Alibaba Cloud (ARN) peran RAM. Metode ini menggunakan token STS. Dengan menentukan ARN peran RAM, alat Kredensial memperoleh token STS dari STS dan memanggil operasi AssumeRole untuk meminta token STS baru sebelum token saat ini kedaluwarsa. Anda juga dapat memberikan nilai ke parameter policy untuk memberikan izin yang lebih kecil kepada peran RAM.

Penting
  • Akun Alibaba Cloud memiliki izin penuh atas semua sumber daya. Kebocoran AccessKey pair Akun Alibaba Cloud menimbulkan risiko signifikan bagi sistem Anda. Kami menyarankan agar Anda menggunakan AccessKey pair dari Pengguna RAM yang diberikan izin minimum yang diperlukan.

  • Untuk informasi selengkapnya tentang cara membuat AccessKey pair untuk Pengguna RAM, lihat Buat AccessKey pair. ID AccessKey dan Rahasia AccessKey Pengguna RAM hanya ditampilkan saat AccessKey pair dibuat. Anda harus segera menyimpannya. Jika Anda lupa AccessKey pair tersebut, buat yang baru untuk rotasi.

  • Untuk informasi selengkapnya tentang cara mendapatkan ARN peran RAM, lihat CreateRole.

  1. Tambahkan library kredensial Alibaba Cloud credentials-php.

    composer require alibabacloud/credentials
  2. Konfigurasikan AccessKey pair dan ARN peran RAM sebagai kredensial akses.

    <?php
    
    // Impor file autoload untuk memastikan dependensi dimuat dengan benar.
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    // Buat objek konfigurasi untuk menentukan jenis kredensial dan informasi terkait.
    $config = new Credential\Config([
        // Tentukan jenis kredensial. Dalam contoh ini, digunakan jenis ARN peran RAM.
        'type' => 'ram_role_arn',
    
        // ID AccessKey Akun Alibaba Cloud.
        'accessKeyId' => 'AccessKeyId',
    
        // Rahasia AccessKey Akun Alibaba Cloud.
        'accessKeySecret' => 'AccessKeySecret',
    
        // ARN peran RAM. Contoh: acs:ram::USER_Id:role/ROLE_NAME.
        'roleArn' => 'RoleArn',
    
        // Nama sesi peran, yang digunakan untuk mengidentifikasi sesi saat ini.
        'roleSessionName' => 'yourRoleSessionName',
    
        // Opsional. Kebijakan yang digunakan untuk membatasi izin token STS.
        'policy' => 'Policy',
    ]);
    
    // Inisialisasi instance kredensial menggunakan objek konfigurasi.
    $credential = new Credential($config);
    
    // Muat konfigurasi SDK default.
    $cfg = Oss\Config::loadDefault();
    
    // Atur penyedia kredensial untuk menghasilkan kredensial secara dinamis menggunakan fungsi callback.
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // Peroleh kredensial sementara (token STS).
        $cred = $credential->getCredential();
    
        // Kembalikan objek kredensial yang berisi ID AccessKey, Rahasia AccessKey, dan token STS.
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // ID AccessKey sementara.
            accessKeySecret: $cred->getAccessKeySecret(),   // Rahasia AccessKey sementara.
            securityToken: $cred->getSecurityToken()      // Token STS.
        );
    }));
    
    // Atur informasi wilayah untuk klien OSS. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // Buat instance klien OSS.
    $client = new Oss\Client($cfg);
    
    // Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Gunakan peran RAM instans

Jika aplikasi Anda berjalan pada Instance ECS, Instance ECI, atau node pekerja Container Service for Kubernetes, kami menyarankan agar Anda menggunakan peran RAM instans untuk menginisialisasi penyedia kredensial. Logika dasar metode ini berbasis token Layanan Keamanan (STS). Peran RAM instans memungkinkan Anda mengaitkan peran dengan Instance ECS, Instance ECI, atau node pekerja Container Service for Kubernetes untuk merefresh token STS secara otomatis di dalam instans. Metode ini tidak memerlukan AccessKey pair atau token STS, yang menghilangkan risiko terkait dengan pengelolaan kredensial ini secara manual. Untuk informasi selengkapnya tentang cara mendapatkan peran RAM instans, lihat CreateRole.

  1. Tambahkan library kredensial Alibaba Cloud credentials-php.

    composer require alibabacloud/credentials
  2. Konfigurasikan peran RAM instans sebagai kredensial akses.

    <?php
    
    // Impor file autoload untuk memastikan dependensi dimuat dengan benar.
    require_once 'vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    // Buat objek konfigurasi untuk menentukan jenis kredensial dan informasi terkait.
    $config = new Credential\Config([
        // Tentukan jenis kredensial. Dalam contoh ini, digunakan jenis peran RAM instans ECS. Nilainya tetap ecs_ram_role.
        'type' => 'ecs_ram_role',
    
        // Tentukan nama peran RAM yang dilampirkan ke Instance ECS.
        'roleName' => "<role_name>",  // Ganti dengan nama peran RAM yang sebenarnya.
    ]);
    
    // Inisialisasi instance kredensial menggunakan objek konfigurasi.
    $credential = new Credential($config);
    
    // Muat konfigurasi default dan peroleh objek konfigurasi OSS.
    $cfg = Oss\Config::loadDefault();
    
    // Atur penyedia kredensial untuk menghasilkan kredensial secara dinamis menggunakan fungsi callback.
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // Peroleh kredensial sementara (token STS).
        $cred = $credential->getCredential();
    
        // Kembalikan objek kredensial yang berisi ID AccessKey, Rahasia AccessKey, dan token STS.
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // ID AccessKey sementara.
            accessKeySecret: $cred->getAccessKeySecret(), // Rahasia AccessKey sementara.
            securityToken: $cred->getSecurityToken()   // Token STS.
        );
    }));
    
    // Atur informasi wilayah untuk klien OSS. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // Buat instance klien OSS.
    $client = new Oss\Client($cfg);
    
    // Gunakan klien yang telah dibuat untuk operasi selanjutnya.
    

Gunakan ARN peran OIDC

Setelah Anda menetapkan peran RAM ke node pekerja di Container Service for Kubernetes (ACK), aplikasi dalam pod pada node tersebut dapat memperoleh token STS dari layanan metadata. Hal ini mirip dengan aplikasi pada Instance ECS. Namun, Anda mungkin tidak ingin aplikasi yang tidak tepercaya, seperti aplikasi dari pelanggan Anda, memperoleh token STS dari peran RAM instans node pekerja. Untuk mengamankan sumber daya cloud Anda sekaligus memungkinkan aplikasi tersebut memperoleh token STS yang mereka butuhkan dengan izin minimal, Anda dapat menggunakan fitur Peran RAM untuk Akun Layanan (RRSA). Metode ini menggunakan token STS. ACK membuat dan memasang file token OpenID Connect (OIDC) untuk setiap pod aplikasi dan menyuntikkan informasi konfigurasi ke variabel lingkungan. Alat Kredensial membaca variabel ini dan memanggil operasi STS AssumeRoleWithOIDC untuk memperoleh token STS untuk peran yang dilampirkan. Metode ini tidak mengharuskan Anda menyediakan AccessKey pair atau token STS, yang menghilangkan risiko pengelolaan kredensial manual. Untuk informasi selengkapnya, lihat Gunakan RRSA untuk mengonfigurasi izin RAM untuk ServiceAccount dan mengisolasi izin pod.

  1. Tambahkan library kredensial Alibaba Cloud credentials-php.

    composer require alibabacloud/credentials
  1. Konfigurasikan ARN peran OIDC sebagai kredensial akses.

    <?php
    
    // Impor file autoload untuk memastikan dependensi dimuat dengan benar.
    require_once 'vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    
    // Buat objek konfigurasi untuk menentukan jenis kredensial dan informasi terkait.
    $config = new Credential\Config([
        // Tentukan jenis kredensial. Dalam contoh ini, digunakan jenis ARN peran OIDC.
        'type' => 'oidc_role_arn',
    
        // Tentukan ARN penyedia identitas OIDC. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
        'oidcProviderArn' => '<oidc_provider_arn>',  // Ganti dengan ARN penyedia OIDC yang sebenarnya.
    
        // Tentukan path file token OIDC. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
        'oidcTokenFilePath' => '<oidc_token_file_path>',  // Ganti dengan path file token OIDC yang sebenarnya.
    
        // Tentukan ARN peran RAM. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
        'roleArn' => '<role_arn>',  // Ganti dengan ARN peran RAM yang sebenarnya.
    
        // Tentukan nama sesi peran. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
        'roleSessionName' => '<role_session_name>',  // Ganti dengan nama sesi peran yang sebenarnya.
    
        // Opsional. Tentukan kebijakan izin untuk peran RAM guna membatasi izinnya.
        // Contoh kebijakan: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        'policy' => '',  // Untuk membatasi izin, ganti ini dengan string JSON kebijakan yang sebenarnya.
    
        // Opsional. Tentukan periode validitas sesi dalam detik. Nilai default adalah 3.600 detik.
        'roleSessionExpiration' => 3600,  // Untuk menyesuaikan periode validitas, ubah nilai ini.
    ]);
    
    // Inisialisasi instance kredensial menggunakan objek konfigurasi.
    $credential = new Credential($config);
    
    // Muat konfigurasi default dan peroleh objek konfigurasi OSS.
    $cfg = Oss\Config::loadDefault();
    
    // Atur penyedia kredensial untuk menghasilkan kredensial secara dinamis menggunakan fungsi callback.
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // Peroleh kredensial sementara (token STS).
        $cred = $credential->getCredential();
    
        // Kembalikan objek kredensial yang berisi ID AccessKey, Rahasia AccessKey, dan token STS.
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // ID AccessKey sementara.
            accessKeySecret: $cred->getAccessKeySecret(), // Rahasia AccessKey sementara.
            securityToken: $cred->getSecurityToken()   // Token STS.
        );
    }));
    
    // Atur informasi wilayah untuk klien OSS. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // Buat instance klien OSS.
    $client = new Oss\Client($cfg);
    
    // Gunakan klien yang telah dibuat untuk operasi selanjutnya.

Gunakan kredensial akses kustom

Jika metode konfigurasi kredensial di atas tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikan metode untuk memperoleh kredensial. SDK mendukung berbagai metode implementasi.

  1. Gunakan Oss\Credentials\CredentialsProviderFunc

    Oss\Credentials\CredentialsProviderFunc adalah pembungkus kemudahan penggunaan untuk Oss\Credentials\CredentialsProvider.

    <?php
    
    // Impor file autoload untuk memastikan dependensi dimuat dengan benar.
    require_once 'vendor/autoload.php';
    
    // Impor namespace yang diperlukan.
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Oss\V2\Credentials\Credentials;
    
    // Buat penyedia kredensial yang menghasilkan kredensial secara dinamis menggunakan fungsi anonim.
    $provider = new Oss\Credentials\CredentialsProviderFunc(
        function () {
            // Kembalikan kredensial jangka panjang, yang hanya berisi ID AccessKey dan Rahasia AccessKey.
            return new Credentials(
                accessKeyId: 'id',         // Ganti dengan ID AccessKey RAM yang sebenarnya.
                accessKeySecret: 'secret'  // Ganti dengan Rahasia AccessKey RAM yang sebenarnya.
            );
    
            // Untuk mengembalikan kredensial sementara, yang mencakup token STS, Anda dapat menghapus komentar kode berikut dan mengganti nilainya dengan nilai yang sebenarnya.
            /*
            return new Credentials(
                accessKeyId: 'id',          // Ganti dengan ID AccessKey sementara yang sebenarnya.
                accessKeySecret: 'secret', // Ganti dengan Rahasia AccessKey sementara yang sebenarnya.
                securityToken: 'token'     // Ganti dengan token STS yang sebenarnya.
            );
            */
        }
    );
    
    // Muat konfigurasi default dan peroleh objek konfigurasi OSS.
    $cfg = Oss\Config::loadDefault();
    
    // Atur penyedia kredensial ke penyedia kredensial yang dihasilkan secara dinamis.
    $cfg->setCredentialsProvider($provider);
    
    // Atur informasi wilayah untuk klien OSS. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // Buat instance klien OSS.
    $client = new Oss\Client($cfg);
    
    // Gunakan klien yang telah dibuat untuk operasi selanjutnya.
    
  2. Implementasikan Oss\Credentials\CredentialsProvider

    <?php
    
    // Impor file autoload untuk memastikan dependensi dimuat dengan benar.
    require_once 'vendor/autoload.php';
    
    // Impor namespace yang diperlukan.
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Oss\V2\Credentials\Credentials;
    
    // Kelas penyedia kredensial kustom yang mengimplementasikan antarmuka CredentialsProvider.
    class CustomerCredentialsProvider implements Oss\Credentials\CredentialsProvider
    {
        /**
         * Metode untuk mendapatkan kredensial. Mengembalikan kredensial jangka panjang atau sementara.
         *
         * @return Credentials Mengembalikan objek kredensial yang berisi informasi AccessKey pair.
         */
        public function getCredentials(): Credentials
        {
            // Kembalikan kredensial jangka panjang, yang hanya berisi ID AccessKey dan Rahasia AccessKey.
            return new Credentials(
                accessKeyId: 'id',         // Ganti dengan ID AccessKey RAM yang sebenarnya.
                accessKeySecret: 'secret'  // Ganti dengan Rahasia AccessKey RAM yang sebenarnya.
            );
    
            // Untuk mengembalikan kredensial sementara, yang mencakup token STS, Anda dapat menghapus komentar kode berikut dan mengganti nilainya dengan nilai yang sebenarnya.
            /*
            return new Credentials(
                accessKeyId: 'id',          // Ganti dengan ID AccessKey sementara yang sebenarnya.
                accessKeySecret: 'secret', // Ganti dengan Rahasia AccessKey sementara yang sebenarnya.
                securityToken: 'token'     // Ganti dengan token STS yang sebenarnya.
            );
            */
        }
    }
    
    // Instansiasi penyedia kredensial kustom.
    $provider = new CustomerCredentialsProvider();
    
    // Muat konfigurasi default dan peroleh objek konfigurasi OSS.
    $cfg = Oss\Config::loadDefault();
    
    // Atur penyedia kredensial ke penyedia kredensial kustom.
    $cfg->setCredentialsProvider($provider);
    
    // Atur informasi wilayah untuk klien OSS. Misalnya, untuk China (Hangzhou), atur wilayah ke cn-hangzhou.
    $region = 'cn-hangzhou';
    $cfg->setRegion($region);
    
    // Buat instance klien OSS.
    $client = new Oss\Client($cfg);
    
    // Gunakan klien yang telah dibuat untuk operasi selanjutnya.
    

Pemecahan masalah kesalahan

Saat Anda menggunakan OSS SDK for PHP 2.0 untuk mengakses OSS, OSS mengembalikan informasi seperti kode status HTTP, pesan, ID permintaan, dan kode kesalahan (EC) jika terjadi kesalahan. EC tersebut berkorespondensi dengan penyebab spesifik kesalahan tersebut. Anda dapat menggunakan EC untuk memecahkan masalah kesalahan tersebut.

  1. Sebagai contoh, Anda menggunakan kode berikut untuk mengunduh file yang tidak ada.

    <?php
    
    // Impor file autoload untuk memastikan dependensi dimuat dengan benar.
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    
    // Definisikan deskripsi untuk argumen baris perintah.
    $optsdesc = [
        "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // Wilayah tempat bucket berada (wajib).
        "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // Titik akhir (opsional).
        "bucket" => ['help' => 'Nama bucket', 'required' => True], // Nama bucket (wajib).
        "key" => ['help' => 'Nama objek', 'required' => True], // Nama objek (wajib).
    ];
    
    // Konversi deskripsi parameter ke format opsi panjang yang diperlukan oleh getopt.
    // Tanda titik dua ":" setelah setiap parameter menunjukkan bahwa parameter tersebut memerlukan nilai.
    $longopts = \array_map(function ($key) {
        return "$key:";
    }, array_keys($optsdesc));
    
    // Uraikan argumen baris perintah.
    $options = getopt("", $longopts);
    
    // Verifikasi bahwa semua parameter wajib tersedia.
    foreach ($optsdesc as $key => $value) {
        if ($value['required'] === True && empty($options[$key])) {
            $help = $value['help']; // Dapatkan informasi bantuan untuk parameter tersebut.
            echo "Kesalahan: argumen berikut wajib: --$key, $help" . PHP_EOL;
            exit(1); // Keluar dari program jika parameter wajib tidak tersedia.
        }
    }
    
    // Ekstrak nilai dari parameter yang diuraikan.
    $region = $options["region"]; // Wilayah tempat bucket berada.
    $bucket = $options["bucket"]; // Nama bucket.
    $key = $options["key"];       // Nama objek.
    
    // Muat kredensial dari variabel lingkungan.
    // Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
    $credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
    
    // Gunakan konfigurasi SDK default.
    $cfg = Oss\Config::loadDefault();
    $cfg->setCredentialsProvider($credentialsProvider); // Atur penyedia kredensial.
    $cfg->setRegion($region); // Atur wilayah tempat bucket berada.
    if (isset($options["endpoint"])) {
        $cfg->setEndpoint($options["endpoint"]); // Jika titik akhir disediakan, atur titik akhir tersebut.
    }
    
    // Buat instance klien OSS.
    $client = new Oss\Client($cfg);
    
    // Buat objek GetObjectRequest untuk mendapatkan konten objek yang ditentukan.
    $request = new Oss\Models\GetObjectRequest(bucket: $bucket, key: $key);
    
    // Lakukan operasi get object.
    $result = $client->getObject($request);
    
    // Definisikan path file lokal untuk menyimpan konten.
    $localFilePath = './test/file.txt'; // Ganti dengan path file yang sebenarnya.
    
    // Tulis konten ke file lokal.
    file_put_contents( $localFilePath, $result->body->getContents());
    
    // Cetak hasilnya.
    // Keluarkan kode status HTTP, ID permintaan, dan konten objek.
    printf(
        'status code:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, 200 menunjukkan keberhasilan.
        'request id:' . $result->requestId . PHP_EOL  // ID permintaan, digunakan untuk debugging atau pelacakan permintaan.
    );
    
  2. Tanggapan contoh berikut dikembalikan. Tanggapan tersebut berisi 'EC': '0026-00000001', yang merupakan pengenal unik untuk penyebab kesalahan.

  3. Ikuti langkah-langkah berikut untuk menemukan penyebab masalah dan solusi yang sesuai berdasarkan EC yang dikembalikan dalam contoh permintaan kesalahan di atas.

    1. Buka Pusat Pemecahan Masalah OpenAPI.

    2. Di kotak pencarian, masukkan EC tersebut, misalnya, 0026-00000001.

    3. Temukan penyebab masalah dan solusi yang sesuai dalam hasil pencarian.

Kode contoh

OSS SDK for PHP 2.0 menyediakan berbagai kode contoh untuk referensi Anda.

Konten contoh

File contoh GitHub

Buat bucket (OSS SDK for PHP 2.0)

PutBucket.php

Daftar bucket (OSS SDK for PHP 2.0)

ListBuckets.php

Periksa apakah bucket ada (OSS SDK for PHP 2.0)

IsBucketExist.php

Dapatkan wilayah bucket (OSS SDK for PHP 2.0)

GetBucketLocation.php

Dapatkan informasi bucket (OSS SDK for PHP 2.0)

GetBucketInfo.php

Dapatkan kapasitas penyimpanan bucket (OSS SDK for PHP 2.0)

GetBucketStat.php

Hapus bucket (OSS SDK for PHP 2.0)

DeleteBucket.php

Penandaan bucket (OSS SDK for PHP 2.0)

Bayar-per-peminta (OSS SDK for PHP 2.0)

Unggah sederhana (OSS SDK for PHP 2.0)

PutObject.php

Unggah lampiran (OSS SDK for PHP 2.0)

AppendObject.php

Unggah multipart (OSS SDK for PHP 2.0)

CompleteMultipartUpload.php

Unggah formulir (OSS SDK for PHP 2.0)

PostObject.php

Unggah objek menggunakan URL yang ditandatangani (OSS SDK for PHP 2.0)

Presign.php

Manajer unggah file (OSS SDK for PHP 2.0)

Uploader.php

Unduh sederhana (OSS SDK for PHP 2.0)

GetObject.php

Unduh rentang (OSS SDK for PHP 2.0)

GetObject.php

Unduh objek menggunakan URL yang ditandatangani (OSS SDK for PHP 2.0)

Presign.php

Manajer unduh file (OSS SDK for PHP 2.0)

Downloader.php

Salin objek (OSS SDK for PHP 2.0)

CopyObject.php

Salin multipart (OSS SDK for PHP 2.0)

UploadPartCopy.php

Manajer salin file (OSS SDK for PHP 2.0)

Copier.php

Periksa apakah objek ada (OSS SDK for PHP 2.0)

IsObjectExist.php

Daftar objek (OSS SDK for PHP 2.0)

ListObjectsV2.php

Hapus objek (OSS SDK for PHP 2.0)

DeleteObject.php

Pulihkan file

RestoreObject.php

Kelola metadata objek (OSS SDK for PHP 2.0)

HeadObject.php

Konversi kelas penyimpanan objek (OSS SDK for PHP 2.0)

CopyObject.php

Ubah nama file (OSS SDK for PHP 2.0)

CopyObject.php

Kelola tautan simbolik (OSS SDK for PHP 2.0)

Atur tag objek (OSS SDK for PHP 2.0)

Dapatkan tag objek (OSS SDK for PHP 2.0)

Hapus tag objek (OSS SDK for PHP 2.0)

Kelola ACL bucket (OSS SDK for PHP 2.0)

Kelola ACL objek (OSS SDK for PHP 2.0)

Kebijakan bucket (OSS SDK for PHP 2.0)

Kelola pengendalian versi (OSS SDK for PHP 2.0)

Proteksi hotlink (OSS SDK for PHP 2.0)

Berbagi sumber daya lintas asal (OSS SDK for PHP 2.0)

Kebijakan retensi (OSS SDK for PHP 2.0)

Enkripsi sisi server (OSS SDK for PHP 2.0)

Enkripsi sisi klien (OSS SDK for PHP 2.0)

EncryptionClient.php

Replikasi data (OSS SDK for PHP 2.0)

Pelacakan akses (OSS SDK for PHP 2.0)

Manajemen siklus hidup (OSS SDK for PHP 2.0)

Hosting website statis (OSS SDK for PHP 2.0)

Penyimpanan log (OSS SDK for PHP 2.0)

Akses real-time objek Archive (OSS SDK for PHP 2.0)

PutBucketArchiveDirectRead.php

Pencarian skalar (OSS SDK for PHP 2.0)

Pencarian vektor (OSS SDK for PHP 2.0)

Ikat nama domain kustom (OSS SDK for PHP 2.0)

Akselerasi transfer (OSS SDK for PHP 2.0)

Pemrosesan sinkron (OSS SDK for PHP 2.0)

ProcessObject.php

Pemrosesan asinkron (OSS SDK for PHP 2.0)

AsyncProcessObject.php

Blokir Akses Publik Global (OSS SDK for PHP 2.0)

PutPublicAccessBlock.php

Blokir Akses Publik tingkat Bucket (OSS SDK for PHP 2.0)

PutBucketPublicAccessBlock.php