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

Object Storage Service:OSS SDK for PHP 2.0

最終更新日:Aug 04, 2026

GitHub | OSS SDK for PHP 2.0 開発者ガイド | SDK リリース

クイック統合

前提条件

OSS SDK for PHP 2.0 は PHP 7.4 以降をサポートしています。このドキュメントのサンプルコードでは PHP 8 の名前付き引数を使用しているため、PHP 8.0 以降が必要です。パッケージ管理のために Composer をダウンロードしてください。

php -version コマンドを実行して PHP のバージョンを確認します。PHP がインストールされていない場合、またはバージョンが 8.0 より前の場合は、PHP をダウンロードしてインストールしてください。

SDK のインストール

  1. プロジェクトディレクトリを作成し、次のコマンドを実行して Composer 経由で OSS SDK for PHP 2.0 をインストールします。サンプルコードとの互換性を確保するために、最新バージョンを使用してください。

    mkdir oss-php-example && cd oss-php-example && composer require alibabacloud/oss-v2
  2. OSS SDK for PHP 2.0 パッケージをインポートします。

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

アクセス認証情報の設定

RAM ユーザーの AccessKey ペアを使用してアクセス認証情報を設定します。

  1. RAM コンソールで、永続的な AccessKey ペア を持つ RAM ユーザーを作成します。AccessKey ペアを保存し、RAM ユーザーに AliyunOSSFullAccess 権限を付与します。

  2. RAM ユーザーの AccessKey ペアを使用して環境変数を設定します。

    Linux

    1. 次のコマンドを実行して、環境変数の設定を ~/.bashrc ファイルに追加します。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. 次のコマンドを実行して変更を適用します。

        source ~/.bashrc
      2. 次のコマンドを実行して、環境変数が設定されているか確認します。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを表示します。

      echo $SHELL
      1. デフォルトのシェルタイプに基づいて、次の手順を実行します。

        Zsh

        1. 次のコマンドを実行して、環境変数の設定を ~/.zshrc ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. 次のコマンドを実行して変更を適用します。

          source ~/.zshrc
        3. 次のコマンドを実行して、環境変数が設定されているか確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. 次のコマンドを実行して、環境変数の設定を ~/.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. 次のコマンドを実行して変更を適用します。

          source ~/.bash_profile
        3. 次のコマンドを実行して、環境変数が設定されているか確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. コマンドプロンプトウィンドウで次のコマンドを実行します。

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. 次のコマンドを実行して、環境変数が設定されているか確認します。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. 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. 次のコマンドを実行して、環境変数が設定されているか確認します。

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

クライアントの初期化

重要

コンプライアンスとセキュリティを向上させるための ポリシー変更により、2025 年 3 月 20 日以降、新しい OSS ユーザーが中国本土リージョンにある OSS バケットでデータ API オペレーションを実行するには、カスタムドメイン名を使用する (CNAME) 必要があります。これらの操作では、デフォルトのパブリックエンドポイントは制限されます。影響を受ける操作の完全なリストについては、公式発表をご参照ください。HTTPS 経由でデータにアクセスする場合、カスタムドメインに有効な SSL 証明書をバインドする必要があります。これは OSS コンソールへのアクセスには必須です。コンソールでは HTTPS が強制されるためです。

サンプルコードを実行する前に、<region-id> などのプレースホルダーを、リージョンとエンドポイントの実際値 (例: ap-southeast-1) に置き換えてください。
<?php

/**
 * OSS SDK for PHP 2.0 クライアント設定の完全ガイド
 *
 * ===========================================
 * V4 署名とリージョン設定
 * ===========================================
 * • OSS SDK for PHP 2.0 は、デフォルトで V4 署名アルゴリズムを使用します。
 * • クライアントを初期化する際に、Alibaba Cloud のリージョン ID を指定する必要があります。
 * • リージョン ID のリストについては、「リージョンとエンドポイント」をご参照ください。
 *
 * ===========================================
 * エンドポイント設定
 * ===========================================
 * • SDK では、endpoint パラメーターを使用してサービスエンドポイントをカスタマイズできます。
 * • endpoint を省略すると、SDK はリージョン情報から自動的にパブリックエンドポイントを構築します。
 * • たとえば、リージョンが '<region-id>' の場合、構築されるエンドポイントは 'https://oss-<region-id>.aliyuncs.com' です。
 *
 * ===========================================
 * プロトコルの選択
 * ===========================================
 * • SDK は、デフォルトで HTTPS を使用してエンドポイントを構築します。これは推奨されるプロトコルです。
 * • HTTP プロトコルを使用するには、エンドポイントに http:// を含めます。
 * • HTTPS の例: 'https://oss-<region-id>.aliyuncs.com'
 * • HTTP の例: 'http://oss-<region-id>.aliyuncs.com'
 */

// 依存関係を正しくロードするためにオートローダーをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider は、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定をロードし、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

// 方法 1: リージョンのみを指定します (推奨)。SDK は自動的に HTTPS エンドポイントを構築します。
$cfg->setRegion(region: "<region-id>");

// // 方法 2: リージョンとエンドポイントの両方を指定します。
// $cfg->setRegion(region: '<region-id>')->setEndpoint(endpoint: 'https://oss-<region-id>.aliyuncs.com');

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// アップロードするデータ。
$data = 'Hello OSS';

// オブジェクトをアップロードするために PutObjectRequest オブジェクトを作成します。
$request = new Oss\Models\PutObjectRequest(
                bucket: "Your Bucket Name",
                key: "Your Object Key",
            );
$request->body = Oss\Utils::streamFor($data); // リクエストボディをデータストリームに設定します。

// アップロード操作を実行します。
$result = $client->putObject($request);

// アップロード結果を出力します。
printf(
    'status code: %s' . PHP_EOL . // HTTP ステータスコード。
    'request id: %s' . PHP_EOL .  // リクエスト ID。
    'etag: %s' . PHP_EOL,         // オブジェクトの ETag。
    $result->statusCode,
    $result->requestId,
    $result->etag
);

アップロード成功時の期待される出力:

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

クライアント設定

サポートされているクライアント設定は何ですか?

パラメーター

説明

例

region

(必須) リクエストの送信先リージョン。

setRegion("<region-id>")

credentialsProvider

(必須) アクセス認証情報のプロバイダー。

setCredentialsProvider(provider)

endpoint

エンドポイント。

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

retryMaxAttempts

HTTP リクエストの最大リトライ回数。デフォルト値は 3 です。

setRetryMaxAttempts(5)

retryer

HTTP リクエストのリトライ実装。

setRetryer(customRetryer)

connectTimeout

接続確立のタイムアウト期間。デフォルト値は 10 秒です。

setConnectTimeout(5)

readWriteTimeout

データの読み書きのタイムアウト期間。デフォルト値は 20 秒です。

setReadwriteTimeout(30)

insecureSkipVerify

SSL 証明書の検証をスキップするかどうかを指定します。デフォルトでは、SSL 証明書は検証されます。

setInsecureSkipVerify(true)

enabledRedirect

HTTP リダイレクトを有効にするかどうかを指定します。デフォルトでは、この機能は無効になっています。

setEnabledRedirect(true)

proxyHost

プロキシサーバーを設定します。

setProxyHost('http://user:password@proxy.example-***.com')

signatureVersion

署名バージョン。デフォルト値は v4 です。

setSignatureVersion("v1")

disableSSL

HTTPS リクエストを使用するかどうかを指定します。デフォルトでは、HTTPS が使用されます。

setDisableSSL(true)

usePathStyle

パス形式の URL を使用するかどうかを指定します。デフォルトでは、バーチャルホスト形式の URL が使用されます。

setUsePathStyle(true)

useCName

カスタムドメインを使用するかどうかを指定します。デフォルトでは、カスタムドメインは使用されません。

setUseCName(true)

useDualStackEndpoint

デュアルスタックエンドポイントを使用するかどうかを指定します。デフォルトでは、デュアルスタックエンドポイントは使用されません。

setUseDualStackEndpoint(true)

useAccelerateEndpoint

アクセラレーションエンドポイントを使用するかどうかを指定します。デフォルトでは、アクセラレーションエンドポイントは使用されません。

setUseAccelerateEndpoint(true)

useInternalEndpoint

内部エンドポイントを使用するかどうかを指定します。デフォルトでは、内部エンドポイントは使用されません。

setUseInternalEndpoint(true)

additionalHeaders

署名される追加のリクエストヘッダー。このパラメーターは V4 署名でのみ有効です。

setAdditionalHeaders(['content-length'])

userAgent

追加の User-Agent 情報。

setUserAgent('user identifier')

カスタムドメインの使用

ブラウザでのファイルプレビューや CDN アクセラレーションを有効にするには、バケットにカスタムドメインをバインドします。

EnvironmentVariableCredentialsProviderAccessKey IDAccessKey シークレットsetUseCnametrue<?php

// 依存関係をロードするためにオートローダーファイルをインクルードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// <code data-tag="inlineCode" id="d5d25f3951tix">EnvironmentVariableCredentialsProvider

タイムアウト制御

<?php

// autoload ファイルから依存関係をロードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// 環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定をロードします。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 認証情報プロバイダーを設定します。

$cfg->setRegion(region: "<region-id>");

# 接続タイムアウトを設定します。
$cfg->setConnectTimeout(connectTimeout: 30);

# 読み書きタイムアウトを設定します。
$cfg->setReadwriteTimeout(readwriteTimeout:30);

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作で使用します...

最大リトライ回数

OSSClient は、失敗したリクエストをデフォルトで 3 回リトライします。

高同時実行数または不安定なネットワークシナリオでは、setRetryMaxAttempts を使用してリトライ回数を増やします。

<?php

// 依存関係が正しくロードされるように、autoload ファイルをインクルードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定をロードし、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

$cfg->setRegion(region: "<region-id>");

// HTTP リクエストの最大試行回数を設定します。デフォルト値は 3 です。
$cfg->setRetryMaxAttempts(5);

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作で使用します...

HTTP/HTTPS プロトコル

setDisableSSL(true) を使用して HTTPS プロトコルを無効にできます。

<?php

// 依存関係をロードするために autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// 環境変数から Access Key ID と Access Key Secret を読み取る認証情報プロバイダーを作成します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// デフォルト設定をロードし、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

$cfg->setRegion(region: "<region-id>");

// SSL を無効にします。
$cfg->setDisableSSL(true);

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// OSS 操作にクライアントを使用します。

Swoole フレームワークでのコルーチンの使用

次のコードは、Swoole フレームワークに基づいてコルーチンをサポートする OSS クライアントを作成する方法の例です。

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

// OSS クライアントを設定します。
$region = '<region-id>'; // OSS リージョン。
$bucket = 'bucket-name'; // 送信先バケット。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); // 環境変数から認証情報をロードします。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 認証情報プロバイダーを設定します。
$cfg->setRegion(region: $region); // リージョンを設定します。
$cfg->setEndpoint(endpoint: 'http://oss-<region-id>.aliyuncs.com'); // エンドポイントを設定します。

// コルーチンをサポートする OSS クライアントを作成します。
$client = new Oss\Client(config: $cfg, options: ['handler' => HandlerStack::create(handler: new CoroutineHandler())]);

// コルーチンタスク 1: swoole.txt をアップロードします。
co(function () use ($client, $bucket) {
    try {
        $key = 'swoole.txt'; // オブジェクト名。
        $data = 'Hello OSS'; // オブジェクトのコンテンツ。
        $request = new Oss\Models\PutObjectRequest($bucket, $key); // アップロードリクエストを作成します。
        $request->body = Oss\Utils::streamFor($data); // リクエストボディを設定します。
        $result = $client->putObject(request: $request); // アップロードを実行します。
        echo "Task 1 Result:\n" . var_export($result, true) . "\n"; // 結果を出力します。
    } catch (\Exception $e) {
        echo "Task 1 Error: " . $e->getMessage() . "\n"; // 例外をキャッチします。
    }
});

// コルーチンタスク 2: hyperf.txt をアップロードします。
co(function () use ($client, $bucket) {
    try {
        $key = 'hyperf.txt'; // オブジェクト名。
        $data = 'Hello OSS'; // オブジェクトのコンテンツ。
        $request = new Oss\Models\PutObjectRequest($bucket, $key); // アップロードリクエストを作成します。
        $request->body = Oss\Utils::streamFor($data); // リクエストボディを設定します。
        $result = $client->putObject($request); // アップロードを実行します。
        echo "Task 2 Result:\n" . var_export($result, true) . "\n"; // 結果を出力します。
    } catch (\Exception $e) {
        echo "Task 2 Error: " . $e->getMessage() . "\n"; // 例外をキャッチします。
    }
});

内部エンドポイントの使用

アプリケーションが Alibaba Cloud Elastic Compute Service (ECS) インスタンスにデプロイされており、同じリージョン内の OSS リソースに頻繁にアクセスする必要がある場合は、内部エンドポイントを使用してトラフィックコストを削減し、アクセス速度を向上させることができます。

<?php

// 依存関係を正しくロードするために autoload ファイルをインクルードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// 環境変数から AccessKey ID と AccessKey Secret を読み取る認証情報プロバイダーを作成します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定をロードし、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

// 方法 1: リージョンを指定し、setUseInternalEndpoint を true に設定します。
$cfg->setRegion('<region-id>')->setUseInternalEndpoint(true);

// // 方法 2: リージョンとエンドポイントを直接指定します。
// // バケットが配置されているリージョンの内部エンドポイントを指定します。
// // HTTP プロトコルを使用するには、エンドポイントを 'http://oss-<region-id>-internal.aliyuncs.com' に設定します。
// $cfg->setRegion('<region-id>')->setEndpoint('https://oss-<region-id>-internal.aliyuncs.com');

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作で使用します...

アクセラレーションエンドポイントの使用

<?php

// プロジェクトの依存関係をロードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// 環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定をロードし、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

// 方法 1: リージョンを指定し、setUseAccelerateEndpoint を true に設定します。
$cfg->setRegion('<region-id>')->setUseAccelerateEndpoint(true);

// // 方法 2: リージョンとエンドポイントを直接指定します。
// // リージョンのアクセラレーションエンドポイントを指定します。
// $cfg->setRegion('<region-id>')->setEndpoint('https://oss-accelerate.aliyuncs.com');

// OSS クライアントを作成します。
$client = new Oss\Client($cfg);

// このクライアントを後続の操作で使用します。

プライベートドメインの使用

<?php

// 依存関係をロードするために autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// 環境変数から AccessKey ID と AccessKey Secret を読み取る認証情報プロバイダーを作成します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定をロードし、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider);

// リージョンを指定し、エンドポイントをプライベートドメインに設定します。
$cfg->setRegion('<region-id>')->setEndpoint('https://service.corp.example.com');

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作で使用します...

Alibaba Gov Cloud エンドポイントの使用

次のコードは、Gov cloud エンドポイントを使用して OSSClient を設定する方法の例です。

<?php

// 依存関係が正しくロードされるように、autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

# デフォルトの SDK 設定をロードし、認証情報プロバイダーを設定します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider(credentialsProvider: $credentialsProvider); // 認証情報プロバイダーを設定します。

// バケットが配置されているリージョンを指定します。たとえば、中国 (北京) Alibaba Gov Cloud 1 の場合、リージョンを cn-north-2-gov-1 に設定します。
// バケットのリージョンの内部エンドポイントを指定します。たとえば、中国 (北京) Alibaba Gov Cloud 1 の場合、エンドポイントを 'https://oss-cn-north-2-gov-1-internal.aliyuncs.com' に設定します。
// HTTP プロトコルを使用するには、エンドポイントを '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');

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作で使用します。

アクセス認証情報の設定

認証要件に基づいて認証情報メソッドを選択します。

アクセス認証情報の選択方法

認証情報プロバイダーの初期化メソッド

シナリオ

既存の AccessKey ペアまたは STS トークンが必要か

基盤となる認証情報

認証情報の有効期間

認証情報のローテーションまたは更新方法

RAM ユーザーの AccessKey ペアの使用

安全で安定した環境にデプロイされ、外部からの攻撃を受けにくいアプリケーション。これらのアプリケーションは、頻繁な認証情報のローテーションなしで Alibaba Cloud サービスへの長期的なアクセスを必要とします。

はい

AccessKey ペア

長期間

手動ローテーション

STS トークンの使用

信頼できない環境にデプロイされたアプリケーション。アクセスの有効期間と権限を制御したい場合。

はい

STS トークン

一時的

手動更新

RAM ロール ARN の使用

クロスアカウントアクセスなど、Alibaba Cloud サービスへの権限付与されたアクセスを必要とするアプリケーション。

はい

STS トークン

一時的

自動更新

RAM ロールの使用

Alibaba Cloud ECS インスタンス、ECI インスタンス、または Container Service for Kubernetes のワーカーノードにデプロイされたアプリケーション。

いいえ

STS トークン

一時的

自動更新

OIDC ロール ARN の使用

Container Service for Kubernetes のワーカーノードにデプロイされた信頼できないアプリケーション。

いいえ

STS トークン

一時的

自動更新

カスタム認証情報プロバイダー

上記のいずれの認証情報設定方法も要件を満たさない場合、認証情報を取得する方法をカスタマイズできます。

カスタム

カスタム

カスタム

カスタム

RAM ユーザーの AccessKey ペアの使用

Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ペアで認証情報プロバイダーを初期化します。頻繁な認証情報ローテーションなしで OSS への長期アクセスが必要な安全な環境に適しています。この方法では手動での AccessKey のメンテナンスが必要となり、セキュリティリスクが高まります。

警告
  • Alibaba Cloud アカウント (root ユーザー) はすべてのリソースに対する完全な権限を持っています。AccessKey ペアが漏洩すると、重大なセキュリティリスクが生じます。最小限の権限を持つ RAM ユーザーの AccessKey ペアを使用してください。

  • RAM ユーザーの AccessKey ペアの作成方法の詳細については、「AccessKey ペアの作成」をご参照ください。RAM ユーザーの AccessKey ID と AccessKey Secret は、AccessKey ペアの作成時にのみ表示されます。すぐに保存する必要があります。AccessKey ペアを忘れた場合は、新しいものを作成してローテーションしてください。

環境変数

  1. RAM ユーザーの AccessKey ペアを使用して環境変数を設定します。

    Linux

    1. CLI で次のコマンドを実行して、環境変数の設定を ~/.bashrc ファイルに追加します。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. 変更を適用します。

        source ~/.bashrc
      2. 環境変数が有効になったか確認します。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを表示します。

      echo $SHELL
      1. デフォルトのシェルタイプに基づいて環境変数を設定します。

        Zsh

        1. 次のコマンドを実行して、環境変数の設定を ~/.zshrc ファイルに追加します。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. 変更を適用します。

          source ~/.zshrc
        3. 環境変数が有効になったか確認します。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. 次のコマンドを実行して、環境変数の設定を ~/.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. 変更を適用します。

          source ~/.bash_profile
        3. 環境変数が反映されているかどうかを確認します:

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. CMD で次のコマンドを実行します。

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. 環境変数が有効になったか確認します。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. 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. 環境変数が有効になったか確認します。

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. 環境変数を変更した後、開発環境 (IDE、ターミナル、バックエンドサービス) を再起動して新しい値をロードします。

  3. 環境変数を使用して認証情報を渡します。

    <?php
    
    // 依存関係が正しくロードされるように、autoload ファイルをインクルードします。
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    
    $region = "<region-id>";
    
    // EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を読み取ります。
    $credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
    
    // デフォルトの SDK 設定を使用します。
    $cfg = Oss\Config::loadDefault();
    $cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
    $cfg->setRegion($region); // バケットのリージョンを設定します。
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作で使用します...

静的認証情報

次のサンプルコードは、使用する AccessKey ペアを明示的に設定することで、アクセス認証情報をハードコーディングする方法を示しています。

警告

本番環境のアプリケーションにアクセス認証情報を埋め込まないでください。この方法はテスト目的でのみ使用します。

<?php

// 依存関係が正しくロードされるように、autoload ファイルをインクルードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

$region = "<region-id>";

# 静的認証情報プロバイダーを作成し、RAM ユーザーの AccessKey ID と AccessKey Secret を設定します。
$credentialsProvider = new Oss\Credentials\StaticCredentialsProvider("RAM AccessKey ID","RAM AccessKey Secret");

// デフォルトの SDK 設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
$cfg->setRegion($region); // バケットのリージョンを設定します。

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作で使用します...

STS トークンの使用

アプリケーションが OSS への一時的なアクセスを必要とする場合、Security Token Service (STS) から取得した一時的な認証情報 (AccessKey ID、AccessKey Secret、および STS トークン) を使用して認証情報プロバイダーを初期化できます。この方法では STS トークンを手動で維持する必要があり、セキュリティリスクとメンテナンスの複雑さが増すことに注意してください。さらに、OSS に複数回一時的にアクセスする場合は、STS トークンを手動で更新する必要があります。

重要
  • OpenAPI を使用して STS トークンを迅速に取得する方法については、「AssumeRole」をご参照ください。

  • SDK を使用して STS トークンを取得する方法については、「STS トークンを使用して OSS にアクセスする」をご参照ください。

  • STS トークンには、トークン生成時に指定された有効期限があることに注意してください。トークンの有効期限が切れると、無効になり使用できなくなります。

  • STS サービスエンドポイントのリストについては、「エンドポイント」をご参照ください。

環境変数

  1. 一時的な認証情報を使用して環境変数を設定します。

    Mac OS X/Linux/UNIX

    警告
    • STS から取得した一時的な認証情報 (AccessKey ID、AccessKey Secret、および STS トークン) を使用します。RAM ユーザーの AccessKey ペアは使用しないでください。

    • STS から取得した AccessKey ID は「STS」で始まることに注意してください (例: 「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

    警告
    • STS から取得した一時的な認証情報 (AccessKey ID、AccessKey Secret、および STS トークン) を使用します。RAM ユーザーの AccessKey ペアは使用しないでください。

    • STS から取得した AccessKey ID は「STS」で始まることに注意してください (例: 「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. 環境変数を使用して認証情報を渡します。

    <?php
    
    // 依存関係が正しくロードされるように、autoload ファイルをインポートします。
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    
    $region = "<region-id>";
    
    // EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID、AccessKey Secret、およびセキュリティトークンを読み取ります。
    $credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
    
    // デフォルトの SDK 設定を使用します。
    $cfg = Oss\Config::loadDefault();
    $cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
    $cfg->setRegion($region); // バケットが配置されているリージョンを設定します。
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作で使用します...

静的認証情報

アプリケーションに認証情報をハードコーディングするには、使用する一時的な AccessKey ペアを明示的に設定します。

警告

本番環境のアプリケーションにアクセス認証情報を埋め込まないでください。この方法はテスト目的でのみ使用します。

<?php

// 依存関係が正しくロードされるように、autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

$region = "<region-id>";

# 一時的な AccessKey ID と AccessKey Secret を指定します。Alibaba Cloud アカウントの AccessKey ペアは使用しないでください。
# STS からの AccessKey ID は「STS.」で始まります。
$stsAccessKeyId = 'STS.****************';
$stsAccessKeySecret = 'yourAccessKeySecret';
# セキュリティトークンを指定します。
$stsSecurityToken = 'yourSecurityToken';

# 静的認証情報プロバイダーを作成し、一時的な AccessKey ID、AccessKey Secret、およびセキュリティトークンを明示的に設定します。
$credentialsProvider = new Oss\Credentials\StaticCredentialsProvider($stsAccessKeyId, $stsAccessKeySecret, $stsSecurityToken);

// デフォルトの SDK 設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを設定します。

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 作成したクライアントを後続の操作で使用します...

RAM ロール ARN の使用

クロスアカウントアクセスや委任された権限付与には、RAM ロール ARN を使用して認証情報プロバイダーを初期化します。Credentials ツールは AssumeRole を呼び出すことで、STS トークンを自動的に取得および更新します。オプションで policy パラメーターを割り当てて、ロールの権限を制限できます。

重要
  • Alibaba Cloud アカウント (root ユーザー) はすべてのリソースに対する完全な権限を持っています。AccessKey ペアが漏洩すると、重大なセキュリティリスクが生じます。最小限の権限を持つ RAM ユーザーの AccessKey ペアを使用してください。

  • RAM ユーザーの AccessKey ペアの作成方法の詳細については、「AccessKey ペアの作成」をご参照ください。RAM ユーザーの AccessKey ID と AccessKey Secret は、AccessKey ペアの作成時にのみ表示されます。すぐに保存する必要があります。AccessKey ペアを忘れた場合は、新しいものを作成してローテーションしてください。

  • RAM ロール ARN の取得方法の詳細については、「CreateRole」をご参照ください。

  1. Alibaba Cloud 認証情報ライブラリ credentials-php を追加します。

    composer require alibabacloud/credentials
  2. AccessKey ペアと RAM ロール ARN をアクセス認証情報として設定します。

    <?php
    
    // 依存関係が正しくロードされるように、autoload ファイルをインクルードします。
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    // 認証情報の種類と関連情報を定義するための設定オブジェクトを作成します。
    $config = new Credential\Config([
        // 認証情報の種類を指定します。この例では、RAM ロール ARN タイプを使用します。
        'type' => 'ram_role_arn',
    
        // Alibaba Cloud アカウントの AccessKey ID。
        'accessKeyId' => 'AccessKeyId',
    
        // Alibaba Cloud アカウントの AccessKey Secret。
        'accessKeySecret' => 'AccessKeySecret',
    
        // RAM ロールの ARN。例: acs:ram::USER_Id:role/ROLE_NAME。
        'roleArn' => 'RoleArn',
    
        // ロールセッション名。セッションを識別するために使用されます。
        'roleSessionName' => 'yourRoleSessionName',
    
        // オプション。STS トークンの権限を制限するために使用されるポリシー。
        'policy' => 'Policy',
    ]);
    
    // 設定オブジェクトで認証情報インスタンスを初期化します。
    $credential = new Credential($config);
    
    // デフォルトの SDK 設定をロードします。
    $cfg = Oss\Config::loadDefault();
    
    // コールバック関数で動的に認証情報を生成するように認証情報プロバイダーを設定します。
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // 一時的な認証情報 (STS トークン) を取得します。
        $cred = $credential->getCredential();
    
        // AccessKey ID、AccessKey Secret、およびセキュリティトークンを含む認証情報オブジェクトを返します。
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // 一時的な AccessKey ID。
            accessKeySecret: $cred->getAccessKeySecret(),   // 一時的な AccessKey Secret。
            securityToken: $cred->getSecurityToken()      // セキュリティトークン (STS トークン)。
        );
    }));
    
    $region = '<region-id>';
    $cfg->setRegion($region);
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // クライアントを後続の操作で使用します...

RAM ロールの使用

ECS インスタンス、ECI インスタンス、または Container Service for Kubernetes (ACK) ワーカーノード上のアプリケーションには、RAM ロールを使用します。この方法では、AccessKey ペアを必要とせず、ご利用の Container Service for Kubernetes インスタンス内で STS トークンが自動的に更新されます。CreateRole。

  1. Alibaba Cloud 認証情報ライブラリ credentials-php を追加します。

    composer require alibabacloud/credentials
  2. RAM ロールをアクセス認証情報として設定します。

    <?php
    
    // 依存関係が正しくロードされるように、autoload ファイルをインポートします。
    require_once 'vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    // 認証情報タイプの設定オブジェクトを作成します。
    $config = new Credential\Config([
        // 認証情報タイプを設定します。RAM ロールの場合、この値は 'ecs_ram_role' である必要があります。
        'type' => 'ecs_ram_role',
    
        // インスタンスにアタッチされた RAM ロールの名前。
        'roleName' => "<role_name>",  // 実際の RAM ロール名に置き換えてください。
    ]);
    
    // 認証情報インスタンスを初期化します。
    $credential = new Credential($config);
    
    // デフォルトの OSS 設定をロードします。
    $cfg = Oss\Config::loadDefault();
    
    // 認証情報プロバイダーを、動的に認証情報を生成する関数に設定します。
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // 一時的な STS トークンを取得します。
        $cred = $credential->getCredential();
    
        // AccessKey ID、AccessKey Secret、およびセキュリティトークンを含む新しい認証情報オブジェクトを返します。
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // 一時的な AccessKey ID
            accessKeySecret: $cred->getAccessKeySecret(), // 一時的な AccessKey Secret
            securityToken: $cred->getSecurityToken()   // セキュリティトークン
        );
    }));
    
    $region = '<region-id>';
    $cfg->setRegion($region);
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作で使用します...
    

OIDC ロール ARN の使用

ワーカーノードの RAM ロールにアクセスすべきでない、Container Service for Kubernetes (ACK) Pod 内の信頼できないアプリケーションには、RAM Roles for Service Account (RRSA) を使用します。ACK は Pod ごとに OIDC トークンファイルをマウントし、環境変数に設定を注入します。Credentials ツールはこれらの変数を読み取り、AssumeRoleWithOIDC を呼び出して最小限の権限を持つ STS トークンを取得します。AccessKey ペアは不要です。RRSA を使用して ServiceAccount の RAM 権限を設定し、Pod の権限を分離する。

  1. Alibaba Cloud 認証情報ライブラリ credentials-php を追加します。

    composer require alibabacloud/credentials
  1. OIDC ロール ARN をアクセス認証情報として設定します。

    <?php
    
    // autoload ファイルから依存関係をロードします。
    require_once 'vendor/autoload.php';
    
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Credentials\Credential;
    
    // 認証情報の種類と関連情報を定義するための設定オブジェクトを作成します。
    $config = new Credential\Config([
        // 認証情報の種類を指定します。この例では、oidc_role_arn タイプを使用します。
        'type' => 'oidc_role_arn',
    
        // OIDC ID プロバイダーの ARN を指定します。ALIBABA_CLOUD_OIDC_PROVIDER_ARN 環境変数を使用して設定することもできます。
        'oidcProviderArn' => '<oidc_provider_arn>',  // 実際の OIDC ID プロバイダー ARN に置き換えてください。
    
        // OIDC トークンファイルのパスを指定します。ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数を使用して設定することもできます。
        'oidcTokenFilePath' => '<oidc_token_file_path>',  // 実際の OIDC トークンファイルのパスに置き換えてください。
    
        // RAM ロールの ARN を指定します。ALIBABA_CLOUD_ROLE_ARN 環境変数を使用して設定することもできます。
        'roleArn' => '<role_arn>',  // 実際の RAM ロール ARN に置き換えてください。
    
        // ロールセッション名を指定します。ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を使用して設定することもできます。
        'roleSessionName' => '<role_session_name>',  // 実際のロールセッション名に置き換えてください。
    
        // オプション: RAM ロールの権限をさらに制限するための権限ポリシーを指定します。
        // ポリシーの例: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        'policy' => '',  // 権限を制限するには、これを実際のポリシー JSON 文字列に置き換えてください。
    
        // オプション: セッションの有効期間を秒単位で指定します。デフォルト値は 3,600 秒です。
        'roleSessionExpiration' => 3600,  // 有効期間を調整するには、この値を変更してください。
    ]);
    
    // 設定オブジェクトを使用して認証情報インスタンスを初期化します。
    $credential = new Credential($config);
    
    // デフォルト設定をロードし、OSS 設定オブジェクトを取得します。
    $cfg = Oss\Config::loadDefault();
    
    // コールバック関数を使用して動的に認証情報を生成する認証情報プロバイダーを設定します。
    $cfg->setCredentialsProvider(new Oss\Credentials\CredentialsProviderFunc(function () use ($credential) {
        // 一時的な認証情報 (STS トークン) を取得します。
        $cred = $credential->getCredential();
    
        // AccessKey ID、AccessKey Secret、およびセキュリティトークンを含む認証情報オブジェクトを返します。
        return new Oss\Credentials\Credentials(
            accessKeyId: $cred->getAccessKeyId(),       // 一時的な AccessKey ID。
            accessKeySecret: $cred->getAccessKeySecret(), // 一時的な AccessKey Secret。
            securityToken: $cred->getSecurityToken()   // セキュリティトークン (STS トークン)。
        );
    }));
    
    $region = '<region-id>';
    $cfg->setRegion($region);
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作で使用します...

カスタムアクセス認証情報の使用

上記の認証情報設定方法が要件を満たさない場合、認証情報を取得する方法をカスタマイズできます。SDK は複数の実装方法をサポートしています。

  1. Oss\Credentials\CredentialsProviderFunc の使用

    Oss\Credentials\CredentialsProviderFunc は、Oss\Credentials\CredentialsProvider のユーザビリティラッパーです。

    <?php
    
    // 依存関係が正しくロードされるように、autoload ファイルをインポートします。
    require_once 'vendor/autoload.php';
    
    // 必要な名前空間をインポートします。
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Oss\V2\Credentials\Credentials;
    
    // 無名関数を使用して動的に認証情報を生成する認証情報プロバイダーを作成します。
    $provider = new Oss\Credentials\CredentialsProviderFunc(
        function () {
            // 長期的な認証情報を返します。これには AccessKey ID と AccessKey Secret のみが含まれます。
            return new Credentials(
                accessKeyId: 'id',         // 実際の RAM AccessKey ID に置き換えてください。
                accessKeySecret: 'secret'  // 実際の RAM AccessKey Secret に置き換えてください。
            );
    
            // セキュリティトークンを含む一時的な認証情報を返すには、次のコードのコメントを解除し、値を置き換えてください。
            /*
            return new Credentials(
                accessKeyId: 'id',          // 実際の STS 一時認証情報の AccessKey ID に置き換えてください。
                accessKeySecret: 'secret', // 実際の STS 一時認証情報の AccessKey Secret に置き換えてください。
                securityToken: 'token'     // 実際の STS セキュリティトークンに置き換えてください。
            );
            */
        }
    );
    
    // デフォルト設定をロードし、OSS 設定オブジェクトを取得します。
    $cfg = Oss\Config::loadDefault();
    
    // 認証情報プロバイダーを動的に生成されたプロバイダーに設定します。
    $cfg->setCredentialsProvider($provider);
    
    $region = '<region-id>';
    $cfg->setRegion($region);
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作で使用します...
    
  2. Oss\Credentials\CredentialsProvider の実装

    <?php
    
    // 依存関係が正しくロードされるように、autoload ファイルをインポートします。
    require_once 'vendor/autoload.php';
    
    // 必要な名前空間をインポートします。
    use AlibabaCloud\Oss\V2 as Oss;
    use AlibabaCloud\Oss\V2\Credentials\Credentials;
    
    // CredentialsProvider インターフェイスを実装するカスタム認証情報プロバイダークラス。
    class CustomerCredentialsProvider implements Oss\Credentials\CredentialsProvider
    {
        /**
         * 認証情報オブジェクトを取得します。
         *
         * @return Credentials 認証情報オブジェクトを返します。
         */
        public function getCredentials(): Credentials
        {
            // 長期的な認証情報を返します。これには AccessKey ID と AccessKey Secret のみが含まれます。
            return new Credentials(
                accessKeyId: 'id',         // 実際の RAM AccessKey ID に置き換えてください。
                accessKeySecret: 'secret'  // 実際の RAM AccessKey Secret に置き換えてください。
            );
    
            // セキュリティトークンを含む一時的な認証情報を返すには、次のコードのコメントを解除し、値を置き換えてください。
            /*
            return new Credentials(
                accessKeyId: 'id',          // 実際の STS 一時認証情報の AccessKey ID に置き換えてください。
                accessKeySecret: 'secret', // 実際の STS 一時認証情報の AccessKey Secret に置き換えてください。
                securityToken: 'token'     // 実際の STS セキュリティトークンに置き換えてください。
            );
            */
        }
    }
    
    // カスタム認証情報プロバイダーをインスタンス化します。
    $provider = new CustomerCredentialsProvider();
    
    // デフォルト設定をロードし、OSS 設定オブジェクトを取得します。
    $cfg = Oss\Config::loadDefault();
    
    // 認証情報プロバイダーをカスタムプロバイダーインスタンスに設定します。
    $cfg->setCredentialsProvider($provider);
    
    $region = '<region-id>';
    $cfg->setRegion($region);
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 作成したクライアントを後続の操作で使用します...
    

エラーのトラブルシューティング

エラーが発生すると、OSS は HTTP ステータスコード、メッセージ、リクエスト ID、およびエラーコード (EC) を返します。EC を使用して問題を診断します。

  1. たとえば、次のコードを使用して存在しないファイルをダウンロードします。

    <?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], // オブジェクト名 (必須)。
    ];
    
    // パラメーターの説明を 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"];       // オブジェクト名。
    
    // 環境変数から認証情報をロードします。
    // 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"]); // エンドポイントが提供されている場合は、エンドポイントを設定します。
    }
    
    // OSS クライアントインスタンスを作成します。
    $client = new Oss\Client($cfg);
    
    // 指定されたオブジェクトのコンテンツを取得するために GetObjectRequest オブジェクトを作成します。
    $request = new Oss\Models\GetObjectRequest(bucket: $bucket, key: $key);
    
    // オブジェクト取得操作を実行します。
    $result = $client->getObject($request);
    
    // コンテンツを保存するローカルファイルのパスを定義します。
    $localFilePath = './test/file.txt'; // 実際のファイルパスに置き換えてください。
    
    // コンテンツをローカルファイルに書き込みます。
    file_put_contents( $localFilePath, $result->body->getContents());
    
    // 結果を出力します。
    // HTTP ステータスコード、リクエスト ID、およびオブジェクトのコンテンツを出力します。
    printf(
        'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、200 は成功を示します。
        'request id:' . $result->requestId . PHP_EOL  // リクエスト ID。デバッグやリクエストの追跡に使用されます。
    );
    
  2. エラー応答の例。'EC': '0026-00000001' は、特定のエラー原因を示します。

    teyimui@xxx 2051 get_object % php get_object_to_file.php   region cn-hangzhou   bucket xxx
    PHP Fatal error:  Uncaught AlibabaCloud\Oss\V2\Exception\ServiceException: Error returned by Service.
    Http Status Code: 404
    Error Code: NoSuchKey
    Request Id: 687F3B562C1E9331312B1F00
    Message: The specified key does not exist.
    EC: 0026-00000001
    Timestamp: Tue, 22 Jul 2025 07:18:46 GMT
    Request Endpoint: GET https://xxx.oss-cn-hangzhou.aliyuncs.com/put-php.txt in xxx
  3. 応答から得られた EC を使用してエラーを診断します。

    1. OpenAPI トラブルシューティングセンターを開きます。

    2. 検索ボックスに EC (例: 0026-00000001) を入力します。[診断] をクリックします。

    3. 結果ページに問題の説明、原因、および解決策が表示されます。

サンプルコード

次の表は、一般的な操作のサンプルコードをリストしています。

サンプルコンテンツ

GitHub サンプルファイル

バケットの作成 (OSS SDK for PHP 2.0)

PutBucket.php

バケットのリスト (OSS SDK for PHP 2.0)

ListBuckets.php

バケットの存在確認 (OSS SDK for PHP 2.0)

IsBucketExist.php

バケットのリージョンの取得 (OSS SDK for PHP 2.0)

GetBucketLocation.php

バケット情報の取得 (OSS SDK for PHP 2.0)

GetBucketInfo.php

バケットのストレージ容量の取得 (OSS SDK for PHP 2.0)

GetBucketStat.php

バケットの削除 (OSS SDK for PHP 2.0)

DeleteBucket.php

バケットのタグ付け (OSS SDK for PHP 2.0)

リクエスタ支払い (OSS SDK for PHP 2.0)

シンプルアップロード (OSS SDK for PHP 2.0)

PutObject.php

追加アップロード (OSS SDK for PHP 2.0)

AppendObject.php

マルチパートアップロード (OSS SDK for PHP 2.0)

CompleteMultipartUpload.php

フォームアップロード (OSS SDK for PHP 2.0)

PostObject.php

署名付き URL を使用したオブジェクトのアップロード (OSS SDK for PHP 2.0)

Presign.php

ファイルアップロードマネージャー (OSS SDK for PHP 2.0)

Uploader.php

シンプルダウンロード (OSS SDK for PHP 2.0)

GetObject.php

範囲ダウンロード (OSS SDK for PHP 2.0)

GetObject.php

署名付き URL を使用したオブジェクトのダウンロード (OSS SDK for PHP 2.0)

Presign.php

ファイルダウンロードマネージャー (OSS SDK for PHP 2.0)

Downloader.php

オブジェクトのコピー (OSS SDK for PHP 2.0)

CopyObject.php

マルチパートコピー (OSS SDK for PHP 2.0)

UploadPartCopy.php

ファイルコピーマネージャー (OSS SDK for PHP 2.0)

Copier.php

オブジェクトの存在確認 (OSS SDK for PHP 2.0)

IsObjectExist.php

オブジェクトのリスト (OSS SDK for PHP 2.0)

ListObjectsV2.php

オブジェクトの削除 (OSS SDK for PHP 2.0)

DeleteObject.php

ファイルの復元

RestoreObject.php

オブジェクトのメタデータの管理 (OSS SDK for PHP 2.0)

HeadObject.php

オブジェクトストレージクラスの変換 (OSS SDK for PHP 2.0)

CopyObject.php

ファイル名の変更 (OSS SDK for PHP 2.0)

CopyObject.php

シンボリックリンクの管理 (OSS SDK for PHP 2.0)

オブジェクトタグの設定 (OSS SDK for PHP 2.0)

オブジェクトタグの取得 (OSS SDK for PHP 2.0)

オブジェクトタグの削除 (OSS SDK for PHP 2.0)

バケット ACL の管理 (OSS SDK for PHP 2.0)

オブジェクト ACL の管理 (OSS SDK for PHP 2.0)

バケットポリシー (OSS SDK for PHP 2.0)

バージョン管理の管理 (OSS SDK for PHP 2.0)

ホットリンク保護 (OSS SDK for PHP 2.0)

クロスオリジンリソース共有 (OSS SDK for PHP 2.0)

保存ポリシー (OSS SDK for PHP 2.0)

サーバーサイド暗号化 (OSS SDK for PHP 2.0)

クライアントサイド暗号化 (OSS SDK for PHP 2.0)

EncryptionClient.php

データレプリケーション (OSS SDK for PHP 2.0)

アクセス追跡 (OSS SDK for PHP 2.0)

ライフサイクル管理 (OSS SDK for PHP 2.0)

静的ウェブサイトホスティング (OSS SDK for PHP 2.0)

ログストレージ (OSS SDK for PHP 2.0)

アーカイブオブジェクトのリアルタイムアクセス (OSS SDK for PHP 2.0)

PutBucketArchiveDirectRead.php

スカラー検索 (OSS SDK for PHP 2.0)

ベクトル検索 (OSS SDK for PHP 2.0)

カスタムドメインのバインド (OSS SDK for PHP 2.0)

転送アクセラレーション (OSS SDK for PHP 2.0)

同期処理 (OSS SDK for PHP 2.0)

ProcessObject.php

非同期処理 (OSS SDK for PHP 2.0)

AsyncProcessObject.php

グローバル公開アクセス禁止 (OSS SDK for PHP 2.0)

PutPublicAccessBlock.php

バケットレベルの公開アクセス禁止 (OSS SDK for PHP 2.0)

PutBucketPublicAccessBlock.php