Topik ini menjelaskan cara menggunakan metode CopyObject dari OSS SDK untuk PHP 2.0 untuk menyalin objek berukuran kurang dari 5 GiB dari bucket sumber ke bucket tujuan dalam wilayah yang sama. Bucket tujuan dapat berupa bucket sumber atau bucket lainnya.
Catatan
Kode contoh dalam topik ini menggunakan ID wilayah
cn-hangzhouuntuk wilayah China (Hangzhou). Secara default, titik akhir publik digunakan untuk mengakses sumber daya dalam bucket. Jika Anda ingin mengakses sumber daya dalam bucket dari layanan Alibaba Cloud lain di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung, lihat Wilayah dan Titik Akhir OSS.Untuk menyalin objek, Anda memerlukan izin baca pada objek sumber serta izin baca dan tulis pada bucket tujuan.
Bucket sumber dan bucket tujuan harus berada dalam wilayah yang sama. Sebagai contoh, objek dalam bucket di wilayah China (Hangzhou) tidak dapat disalin ke bucket lain di wilayah China (Qingdao).
Pastikan tidak ada kebijakan retensi yang dikonfigurasi untuk bucket sumber dan bucket tujuan. Jika tidak, pesan kesalahan Objek yang Anda tentukan tidak dapat diubah. akan ditampilkan.
Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk instruksi lebih lanjut, lihat Konfigurasi Kredensial Akses.
Kode contoh
Berikut adalah kode contoh 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;
// Tentukan dan jelaskan parameter baris perintah.
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // (Diperlukan) Tentukan wilayah tempat bucket berada.
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // (Opsional) Tentukan titik akhir.
"bucket" => ['help' => 'Nama bucket', 'required' => True], // (Diperlukan) Tentukan nama bucket tujuan.
"key" => ['help' => 'Nama objek', 'required' => True], // (Diperlukan) 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], // (Diperlukan) Tentukan nama objek sumber.
];
// Ubah deskripsi menjadi daftar opsi panjang yang diperlukan oleh getopt.
// Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Parsing parameter baris perintah.
$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.
echo "Error: argumen berikut diperlukan: --$key, $help" . PHP_EOL;
exit(1); // Keluar dari program jika parameter yang diperlukan tidak ada.
}
}
// Tetapkan nilai yang diurai dari parameter baris perintah 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 dari 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 titik akhir jika satu disediakan.
}
// Buat instance 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 diberikan, tentukan parameter sourceBucket.
}
$request->sourceKey = $srcKey; // Tentukan nama objek sumber.
// Salin objek sumber.
$result = $client->copyObject($request);
// Keluarkan hasilnya.
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Sebagai contoh, kode status HTTP 200 menunjukkan bahwa permintaan berhasil.
'ID permintaan:' . $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.