All Products
Search
Document Center

Object Storage Service:Menyalin objek menggunakan OSS SDK untuk PHP 2.0

Last Updated:Aug 25, 2026

Topik ini menjelaskan cara menggunakan metode CopyObject dari OSS SDK untuk PHP 2.0 guna menyalin objek berukuran kurang dari 5 GiB dari bucket sumber ke bucket tujuan dalam wilayah yang sama. Bucket tujuan dapat berupa bucket sumber itu sendiri atau bucket yang berbeda.

Catatan

  • Kode contoh dalam topik ini menggunakan ID wilayah cn-hangzhou untuk wilayah China (Hangzhou). Secara default, titik akhir publik digunakan untuk mengakses sumber daya dalam bucket. Jika Anda ingin mengakses sumber daya tersebut dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir yang didukung, lihat Wilayah dan titik akhir OSS.

  • Untuk menyalin objek, Anda harus memiliki izin baca pada objek sumber dan izin daftar kontrol akses (ACL) pada bucket tujuan.

  • Penyalinan lintas-wilayah tidak didukung. Misalnya, Anda tidak dapat menyalin objek dari bucket di wilayah China (Hangzhou) ke bucket di wilayah China (Qingdao).

  • Saat menyalin objek, pastikan tidak ada kebijakan retensi yang dikonfigurasi pada bucket sumber maupun bucket tujuan. Jika tidak, error berikut akan dikembalikan: The object you specified is immutable.

  • Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk contoh lain mengenai konfigurasi kredensial akses, lihat Konfigurasi kredensial akses (PHP SDK V2).

Kode contoh

Anda dapat menggunakan kode contoh berikut untuk menyalin objek berukuran kurang dari 5 GiB dari bucket sumber ke bucket tujuan:

<?php

// Sertakan file autoload untuk memuat dependensi.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Definisikan dan deskripsikan parameter command line.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // (Wajib) Tentukan wilayah tempat bucket berada.
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // (Opsional) Tentukan endpoint.
    "bucket" => ['help' => 'Nama bucket', 'required' => True], // (Wajib) Tentukan nama bucket tujuan.
    "key" => ['help' => 'Nama objek', 'required' => True], // (Wajib) Tentukan nama objek tujuan.
    "src-bucket" => ['help' => 'Nama bucket sumber', 'required' => False], // (Opsional) Tentukan nama bucket sumber.
    "src-key" => ['help' => 'Nama objek sumber', 'required' => True], // (Wajib) Tentukan nama objek sumber.
];

// Konversi deskripsi menjadi daftar opsi panjang yang diperlukan oleh getopt.
// Tambahkan tanda titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan. 
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Urai parameter command line.
$options = getopt("", $longopts);

// Periksa apakah parameter yang diperlukan telah dikonfigurasi.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // Dapatkan informasi bantuan untuk parameter tersebut.
        echo "Error: argumen berikut wajib diisi: --$key, $help" . PHP_EOL;
        exit(1); // Hentikan program jika parameter wajib tidak tersedia.
    }
}

// Tetapkan nilai yang diurai dari parameter command line ke variabel yang sesuai.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket tujuan.
$key = $options["key"];       // Nama objek tujuan.
$srcKey = $options["src-key"]; // Nama objek sumber.

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

// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Tentukan penyedia kredensial.
$cfg->setRegion($region); // Tentukan wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // Tentukan endpoint jika disediakan.
}

// Buat instans OSSClient.
$client = new Oss\Client($cfg);

// Buat objek CopyObjectRequest untuk menyalin objek sumber.
$request = new Oss\Models\CopyObjectRequest(
            bucket: $bucket,
            key: $key);

if (!empty($options["src-bucket"])) {
    $request->sourceBucket = $options["src-bucket"]; // Jika nama bucket sumber disediakan, tentukan parameter sourceBucket.
}
$request->sourceKey = $srcKey; // Tentukan nama objek sumber.

// Salin objek sumber.
$result = $client->copyObject($request);

// Tampilkan hasilnya.
printf(
    'status code:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, kode status HTTP 200 menunjukkan permintaan berhasil.
    'request id:' . $result->requestId . PHP_EOL     // ID permintaan, yang digunakan untuk debugging atau melacak permintaan.
);

Referensi

  • Untuk kode contoh lengkap yang digunakan untuk menyalin objek, kunjungi GitHub.