すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS SDK for PHP 2.0 によるオブジェクトのコピー

最終更新日:Aug 25, 2026

このトピックでは、OSS SDK for PHP 2.0 の CopyObject メソッドを使用して、同じリージョン内のソースバケットから送信先バケットへ、 5 GiB 未満 のサイズのオブジェクトをコピーする方法について説明します。送信先バケットは、ソースバケットと同じバケットでも、異なるバケットでもかまいません。

注意事項

  • このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID cn-hangzhou を使用しています。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。同じリージョン内の他の Alibaba Cloud サービスからバケット内のリソースにアクセスする場合は、内部エンドポイントを使用してください。サポートされているリージョンとエンドポイントの詳細については、「OSS リージョンとエンドポイント」をご参照ください。

  • オブジェクトをコピーするには、ソースオブジェクトの読み取り権限と、送信先バケットのアクセス制御リスト (ACL) 権限が必要です。

  • クロスリージョンコピーはサポートされていません。たとえば、中国 (杭州) リージョンのバケットから中国 (青島) リージョンのバケットへオブジェクトをコピーすることはできません。

  • オブジェクトをコピーする際は、ソースバケットまたは送信先バケットに保持ポリシーが設定されていないことを確認してください。設定されている場合、次のエラーが返されます: The object you specified is immutable.

  • このトピックでは、環境変数からアクセス認証情報を取得します。アクセス認証情報の設定に関するその他の例については、「アクセス認証情報の設定 (PHP SDK V2)」をご参照ください。

サンプルコード

次のサンプルコードを使用して、ソースバケットから送信先バケットへ、 5 GiB 未満 のサイズのオブジェクトをコピーできます。

<?php

// 依存関係を読み込むため、autoload ファイルをインクルードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメーターを定義し、説明を記述します。
$optsdesc = [
    "region" => ['help' => 'バケットが存在するリージョン。', 'required' => True], // (必須) バケットが存在するリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS へのアクセスに使用できるドメイン名。', 'required' => False], // (オプション) エンドポイントを指定します。
    "bucket" => ['help' => '送信先バケットの名前', 'required' => True], // (必須) 送信先バケットの名前を指定します。
    "key" => ['help' => '送信先オブジェクトの名前', 'required' => True], // (必須) 送信先オブジェクトの名前を指定します。
    "src-bucket" => ['help' => 'ソースバケットの名前', 'required' => False], // (オプション) ソースバケットの名前を指定します。
    "src-key" => ['help' => 'ソースオブジェクトの名前', 'required' => True], // (必須) ソースオブジェクトの名前を指定します。
];

// 説明を getopt で必要とされるロングオプションのリストに変換します。
// 値が必須であることを示すため、各パラメーターの末尾にコロン (:) を追加します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);

// 必須パラメーターが設定されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターのヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須パラメーターが指定されていない場合、プログラムを終了します。
    }
}

// コマンドラインパラメーターから解析された値を対応する変数に割り当てます。
$region = $options["region"]; // バケットが存在するリージョン。
$bucket = $options["bucket"]; // 送信先バケットの名前。
$key = $options["key"];       // 送信先オブジェクトの名前。
$srcKey = $options["src-key"]; // ソースオブジェクトの名前。

// 環境変数からアクセス認証情報を読み込みます。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを指定します。
$cfg->setRegion($region); // バケットが存在するリージョンを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが指定されている場合は、それを設定します。
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// ソースオブジェクトのコピー用に CopyObjectRequest オブジェクトを作成します。
$request = new Oss\Models\CopyObjectRequest(
            bucket: $bucket,
            key: $key);

if (!empty($options["src-bucket"])) {
    $request->sourceBucket = $options["src-bucket"]; // ソースバケット名が指定されている場合、sourceBucket パラメーターを設定します。
}
$request->sourceKey = $srcKey; // ソースオブジェクトの名前を指定します。

// ソースオブジェクトをコピーします。
$result = $client->copyObject($request);

// 結果を出力します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 はリクエストの成功を意味します。
    'request id:' . $result->requestId . PHP_EOL     // リクエスト ID。リクエストのデバッグや追跡に使用します。
);

関連ドキュメント

  • オブジェクトのコピーに関する完全なサンプルコードについては、 GitHub をご参照ください。