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

Object Storage Service:OSS SDK for PHP V2 を使用して開始する

最終更新日:May 15, 2025

このトピックでは、OSS SDK for PHP V2 を使用して Object Storage Service (OSS) をすぐに使い始める方法について説明します。 OSS SDK for PHP のインストール方法、アクセス認証情報の構成方法、およびバケットの作成、オブジェクトのアップロード、ダウンロード、一覧表示、削除などの基本操作の実行方法を学ぶことができます。

注記

前提条件

環境変数を構成する

  1. OSS へのフルアクセス権限を持つ Resource Access Management (RAM) ユーザーの AccessKey ペアを作成します。詳細については、「AccessKey ペアを作成する」をご参照ください。

    ROS を使用して AccessKey ペアを作成する

    Resource Orchestration Service (ROS) スクリプトを使用して、OSS へのフルアクセス権限を持つ RAM ユーザーの AccessKey ペアを迅速に作成できます。そのためには、テンプレートベースのスタック作成ウィザード に移動し、セキュリティ確認 セクションで Alibaba Cloud ROS が RAM リソースを作成することを確認します を選択し、作成 をクリックします。

    1.png

    AccessKey ペアが作成された後、出力 タブで AccessKey ペアをコピーします。

    image

  2. 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
    2. デフォルトのシェルタイプに基づいて環境変数を構成します。

      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"
    2. 次のコマンドを実行して、環境変数が有効になっているかどうかを確認します。

      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)
    2. 次のコマンドを実行して、環境変数が有効になっているかどうかを確認します。

      [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  3. 上記のように環境変数を構成した後、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。リクエストのデバッグまたは追跡に使用できます。
);

実行例

  1. オブジェクトのアップロードを例にとります。まず、プロジェクトディレクトリに put_object.php ファイルを作成し、オブジェクトをアップロードするためのサンプルコードをコピーして put_object.php ファイルに貼り付けます。

  2. 次に、次のコマンドの "yourRegion"、 "yourBucketName"、および "yourObjectName" を実際の情報に置き換えます。

    php put_object.php --region "yourRegion" --bucket "yourBucketName" --key "yourObjectName"

FAQ

OSS SDK を使用しているときに AccessDenied エラーが報告された場合はどうすればよいですか?

AccessDenied エラーは、通常、アクセス権限が不十分なために発生します。この問題を解決するには、次の手順を実行します。

  1. AccessKey ID と AccessKey シークレットを確認します。使用している AccessKey ID と AccessKey シークレットが正しいことを確認してください。詳細については、「AccessKey ペアを作成する」をご参照ください。

  2. RAM ユーザーに付与されている権限を確認します。RAM ユーザーにバケットまたはオブジェクトに対する操作を実行するために必要な権限が付与されていることを確認してください。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

  3. バケットポリシーを確認します。エラーメッセージに「Access denied by bucket policy」が含まれている場合、バケットポリシーで指定された制限が原因でエラーが発生したことを示します。詳細については、「バケットポリシー」をご参照ください。

  4. 他のタイプのエラーについては、「エラーコード」をご参照ください。たとえば、アクセスコントロールに関連する一般的なエラーについては、「03-ACCESS_CONTROL」セクションを参照できます。

参考資料

  • その他のコードサンプルについては、GitHub にアクセスしてください。