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 のインストール
プロジェクトディレクトリを作成し、次のコマンドを実行して Composer 経由で OSS SDK for PHP 2.0 をインストールします。サンプルコードとの互換性を確保するために、最新バージョンを使用してください。
mkdir oss-php-example && cd oss-php-example && composer require alibabacloud/oss-v2OSS SDK for PHP 2.0 パッケージをインポートします。
require_once __DIR__ . '/../vendor/autoload.php'; use AlibabaCloud\Oss\V2 as Oss;
アクセス認証情報の設定
RAM ユーザーの AccessKey ペアを使用してアクセス認証情報を設定します。
RAM コンソールで、永続的な AccessKey ペア を持つ RAM ユーザーを作成します。AccessKey ペアを保存し、RAM ユーザーに
AliyunOSSFullAccess権限を付与します。RAM ユーザーの AccessKey ペアを使用して環境変数を設定します。
Linux
次のコマンドを実行して、環境変数の設定を
~/.bashrcファイルに追加します。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc次のコマンドを実行して変更を適用します。
source ~/.bashrc次のコマンドを実行して、環境変数が設定されているか確認します。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを表示します。
echo $SHELLデフォルトのシェルタイプに基づいて、次の手順を実行します。
Zsh
次のコマンドを実行して、環境変数の設定を
~/.zshrcファイルに追加します。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc次のコマンドを実行して変更を適用します。
source ~/.zshrc次のコマンドを実行して、環境変数が設定されているか確認します。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
次のコマンドを実行して、環境変数の設定を
~/.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次のコマンドを実行して変更を適用します。
source ~/.bash_profile次のコマンドを実行して、環境変数が設定されているか確認します。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
コマンドプロンプトウィンドウで次のコマンドを実行します。
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"次のコマンドを実行して、環境変数が設定されているか確認します。
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
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)次のコマンドを実行して、環境変数が設定されているか確認します。
[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"クライアント設定
カスタムドメインの使用
ブラウザでのファイルプレビューや 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);
// 作成したクライアントを後続の操作で使用します。アクセス認証情報の設定
認証要件に基づいて認証情報メソッドを選択します。
RAM ユーザーの AccessKey ペアの使用
Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ペアで認証情報プロバイダーを初期化します。頻繁な認証情報ローテーションなしで OSS への長期アクセスが必要な安全な環境に適しています。この方法では手動での AccessKey のメンテナンスが必要となり、セキュリティリスクが高まります。
Alibaba Cloud アカウント (root ユーザー) はすべてのリソースに対する完全な権限を持っています。AccessKey ペアが漏洩すると、重大なセキュリティリスクが生じます。最小限の権限を持つ RAM ユーザーの AccessKey ペアを使用してください。
RAM ユーザーの AccessKey ペアの作成方法の詳細については、「AccessKey ペアの作成」をご参照ください。RAM ユーザーの AccessKey ID と AccessKey Secret は、AccessKey ペアの作成時にのみ表示されます。すぐに保存する必要があります。AccessKey ペアを忘れた場合は、新しいものを作成してローテーションしてください。
環境変数
RAM ユーザーの AccessKey ペアを使用して環境変数を設定します。
Linux
CLI で次のコマンドを実行して、環境変数の設定を
~/.bashrcファイルに追加します。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc変更を適用します。
source ~/.bashrc環境変数が有効になったか確認します。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを表示します。
echo $SHELLデフォルトのシェルタイプに基づいて環境変数を設定します。
Zsh
次のコマンドを実行して、環境変数の設定を
~/.zshrcファイルに追加します。echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc変更を適用します。
source ~/.zshrc環境変数が有効になったか確認します。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
次のコマンドを実行して、環境変数の設定を
~/.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変更を適用します。
source ~/.bash_profile環境変数が反映されているかどうかを確認します:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
CMD で次のコマンドを実行します。
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"環境変数が有効になったか確認します。
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
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)環境変数が有効になったか確認します。
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
環境変数を変更した後、開発環境 (IDE、ターミナル、バックエンドサービス) を再起動して新しい値をロードします。
環境変数を使用して認証情報を渡します。
<?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 サービスエンドポイントのリストについては、「エンドポイント」をご参照ください。
環境変数
一時的な認証情報を使用して環境変数を設定します。
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>環境変数を使用して認証情報を渡します。
<?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」をご参照ください。
Alibaba Cloud 認証情報ライブラリ credentials-php を追加します。
composer require alibabacloud/credentialsAccessKey ペアと 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。
Alibaba Cloud 認証情報ライブラリ credentials-php を追加します。
composer require alibabacloud/credentialsRAM ロールをアクセス認証情報として設定します。
<?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 の権限を分離する。
Alibaba Cloud 認証情報ライブラリ credentials-php を追加します。
composer require alibabacloud/credentials
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 は複数の実装方法をサポートしています。
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); // 作成したクライアントを後続の操作で使用します...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 を使用して問題を診断します。
たとえば、次のコードを使用して存在しないファイルをダウンロードします。
<?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。デバッグやリクエストの追跡に使用されます。 );エラー応答の例。'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応答から得られた EC を使用してエラーを診断します。
OpenAPI トラブルシューティングセンターを開きます。
検索ボックスに EC (例: 0026-00000001) を入力します。[診断] をクリックします。
結果ページに問題の説明、原因、および解決策が表示されます。
サンプルコード
次の表は、一般的な操作のサンプルコードをリストしています。
サンプルコンテンツ | GitHub サンプルファイル |
オブジェクトタグの設定 (OSS SDK for PHP 2.0) | |