このトピックでは、OSS SDK for PHP V2 を使用して Object Storage Service (OSS) をすぐに使い始める方法について説明します。 OSS SDK for PHP のインストール方法、アクセス認証情報の構成方法、およびバケットの作成、オブジェクトのアップロード、ダウンロード、一覧表示、削除などの基本操作の実行方法を学ぶことができます。
注記
リージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
前提条件
Alibaba Cloud アカウントが作成されている。
OSS がアクティブ化されている。
環境変数を構成する
OSS へのフルアクセス権限を持つ Resource Access Management (RAM) ユーザーの AccessKey ペアを作成します。詳細については、「AccessKey ペアを作成する」をご参照ください。
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、コマンドラインインターフェイス、その他のデスクトップアプリケーション、バックグラウンドサービスなど、コンパイル環境とランタイム環境を再起動またはリフレッシュして、最新のシステム環境変数が正常にロードされていることを確認してください。
OSS SDK for PHP をインストールする
OSS SDK for PHP をインストールして使用する前に、PHP のダウンロードとインストール手順に従って、PHP V7.4 以降のランタイム環境をダウンロードしてインストールしてください。
Composer をダウンロードします。
次のコマンドを実行して、Composer を使用して OSS SDK for PHP をインストールします。
mkdir oss-php-example && cd oss-php-example && composer require alibabacloud/oss-v2
次のコード行を使用して、プロジェクトに OSS SDK for PHP パッケージを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
デモプロジェクト
次の例では、バケットを作成し、オブジェクトをアップロード、ダウンロード、一覧表示、および削除する方法について説明します。
バケットを作成する
<?php
// 依存関係をロードするために autoload ファイルを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドライン引数を定義し、説明します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) OSS にアクセスするためのエンドポイントを指定します。
"bucket" => ['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 "エラー: 次の引数は必須です: --$key, $help" . PHP_EOL;
exit(1); // 必須の引数が欠落している場合はプログラムを終了します。
}
}
// 解析された引数を抽出して使用します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
// 環境変数からアクセス認証情報をロードします。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey シークレットを取得します。
$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);
// PutBucketRequest オブジェクトを作成してバケットを作成します。
$request = new Oss\Models\PutBucketRequest(bucket: $bucket);
// バケットを作成します。
$result = $client->putBucket($request);
// 結果を出力します。
// HTTP ステータスコードとリクエスト ID を表示して、リクエストが成功したかどうかを確認します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 はリクエストが成功したことを示します。
'request id:' . $result->requestId . PHP_EOL // リクエスト ID。リクエストのデバッグまたは追跡に使用できます。
);
オブジェクトをアップロードする
<?php
// 依存関係をロードするために autoload ファイルを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドライン引数を定義し、説明します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) OSS にアクセスするためのエンドポイントを指定します。
"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 "エラー: 次の引数は必須です: --$key, $help" . PHP_EOL;
exit(1); // 必須の引数が欠落している場合はプログラムを終了します。
}
}
// 解析された引数を抽出して使用します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。
// 環境変数からアクセス認証情報をロードします。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey シークレットを取得します。
$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);
// アップロードするデータを指定します。
$dataBytes = [72, 101, 108, 108, 111, 32, 79, 83, 83]; // 'Hello OSS' の ASCII 値。
$dataString = implode(array_map('chr', $dataBytes)); // 配列を文字列に変換します。
// PutObjectRequest オブジェクトを作成してデータをアップロードします。
$request = new Oss\Models\PutObjectRequest(bucket: $bucket, key: $key);
$request->body = Oss\Utils::streamFor($dataString); // リクエスト本文をストリームとして指定します。
// アップロード操作を実行します。
$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
);
オブジェクトをダウンロードする
<?php
// 依存関係をロードするために autoload ファイルを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドライン引数を定義し、説明します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) OSS にアクセスするためのエンドポイントを指定します。
"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 "エラー: 次の引数は必須です: --$key, $help" . PHP_EOL;
exit(1); // 必須の引数が欠落している場合はプログラムを終了します。
}
}
// 解析された引数を抽出して使用します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。
// 環境変数からアクセス認証情報をロードします。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey シークレットを取得します。
$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);
// 結果を表示します。
// HTTP ステータスコード、リクエスト ID、およびオブジェクトのコンテンツを表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 はリクエストが成功したことを示します。
'request id:' . $result->requestId . PHP_EOL . // リクエスト ID。リクエストのデバッグまたは追跡に使用されます。
'body:' . $result->body->getContents() // オブジェクトのコンテンツ。コンテンツは getContents () メソッドを使用して読み取られます。
);
オブジェクトを一覧表示する
<?php
// 依存関係をロードするために autoload ファイルを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドライン引数を定義し、説明します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) OSS にアクセスするためのエンドポイントを指定します。
"bucket" => ['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 "エラー: 次の引数は必須です: --$key, $help" . PHP_EOL;
exit(1); // 必須の引数が欠落している場合はプログラムを終了します。
}
}
// 解析された引数を抽出して使用します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
// 環境変数からアクセス認証情報をロードします。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey シークレットを取得します。
$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);
// Paginator オブジェクトを作成して、オブジェクトをページごとに一覧表示します。
// ListObjectsV2Paginator を使用して、オブジェクトをページごとに一覧表示します。
$paginator = new Oss\Paginator\ListObjectsV2Paginator(client: $client);
$iter = $paginator->iterPage(new Oss\Models\ListObjectsV2Request(bucket: $bucket)); // ページネーションイテレータを初期化します。
// 一覧表示されたオブジェクトをトラバースします。
foreach ($iter as $page) {
foreach ($page->contents ?? [] as $object) {
// 各オブジェクトに関する情報を表示します。
// 各オブジェクトの名前、タイプ、およびサイズを表示します。
print("Object: $object->key, $object->type, $object->size\n");
}
}
オブジェクトを削除する
<?php
// 依存関係をロードするために autoload ファイルを含めます。
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドライン引数を定義し、説明します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (オプション) OSS にアクセスするためのエンドポイントを指定します。
"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 "エラー: 次の引数は必須です: --$key, $help" . PHP_EOL;
exit(1); // 必須の引数が欠落している場合はプログラムを終了します。
}
}
// 解析された引数を抽出して使用します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。
// 環境変数からアクセス認証情報をロードします。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey シークレットを取得します。
$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);
// DeleteObjectRequest オブジェクトを作成して、指定されたオブジェクトを削除します。
$request = new Oss\Models\DeleteObjectRequest(bucket: $bucket, key: $key);
// オブジェクトを削除します。
$result = $client->deleteObject($request);
// オブジェクト削除操作の結果を表示します。
// HTTP ステータスコードとリクエスト ID を表示して、リクエストが成功したかどうかを確認します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 204 は削除が成功したことを示します。
'request id:' . $result->requestId . PHP_EOL // リクエスト ID。リクエストのデバッグまたは追跡に使用できます。
);
実行例
オブジェクトのアップロードを例にとります。まず、プロジェクトディレクトリに put_object.php ファイルを作成し、オブジェクトをアップロードするためのサンプルコードをコピーして put_object.php ファイルに貼り付けます。
次に、次のコマンドの "yourRegion"、 "yourBucketName"、および "yourObjectName" を実際の情報に置き換えます。
php put_object.php --region "yourRegion" --bucket "yourBucketName" --key "yourObjectName"
FAQ
OSS SDK を使用しているときに AccessDenied エラーが報告された場合はどうすればよいですか?
参考資料
OSS SDK for PHP V2 の詳細については、「OSS SDK for PHP V2 ドキュメント」をご参照ください。
その他のコードサンプルについては、GitHub にアクセスしてください。