PHP を使用して Azure Blob Storage との間でオブジェクトを転送する

このクイック スタートでは、PHP を使って、Azure Blob Storage のコンテナー内のブロック BLOB をアップロード、ダウンロード、および一覧表示する方法を説明します。

前提条件

Azure Storage にアクセスするには、Azure サブスクリプションが必要です。 まだサブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

Azure Storage へのアクセスはすべて、ストレージ アカウント経由で行われます。 このクイック スタートでは、Azure portal、Azure PowerShell、または Azure CLI を使用して、ストレージ アカウントを作成します。 ストレージ アカウントの作成については、「ストレージ アカウントの作成」を参照してください。

次の追加の前提条件がインストールされていることを確認してください。

サンプル アプリケーションのダウンロード

このクイック スタートで使うサンプル アプリケーションは、基本的な PHP アプリケーションです。

アプリケーションのコピーを開発環境にダウンロードするには、git を使います。

git clone https://github.com/Azure-Samples/storage-blobs-php-quickstart.git

このコマンドは、ローカルの git フォルダーにリポジトリを複製します。 PHP のサンプル アプリケーションを開くには、storage-blobs-php-quickstart フォルダーを検索し、phpqs.php ファイルを開きます。

Azure Portal で資格情報をコピーする

サンプル アプリケーションは、ストレージ アカウントへのアクセスを承認する必要があります。 アプリケーションには、ストレージ アカウントの資格情報を接続文字列の形式で提供します。 ストレージ アカウントの資格情報を表示するには、次のように操作します。

  1. Azure portal で、ストレージ アカウントに移動します。

  2. ストレージ アカウントの概要の [設定] セクションで [アクセス キー] を選択し、アカウントのアクセス キーと接続文字列を表示します。

  3. ストレージ アカウントの名前をメモしておきます。認可を得るためには、この名前が必要となります。

  4. [key1][キー] 値を見つけ、[コピー] を選択してアカウント キーをコピーします。

    Azure portal でアカウント キーをコピーする方法を示すスクリーン ショット

ストレージ接続文字列の構成

アプリケーションでは、ストレージ アカウント名とアカウント キーを指定して、お使いのアプリケーションの BlobRestProxy インスタンスを作成する必要があります。 アプリケーションを実行しているローカル マシンの環境変数内にこれらの識別子を格納することをお勧めします。 環境変数を作成するオペレーティング システムに応じて、以下のいずれかの例を使用します。 youraccountname および youraccountkey の値を、自分のアカウント名とキーに置き換えます。

export ACCOUNT_NAME=<youraccountname>
export ACCOUNT_KEY=<youraccountkey>

環境を構成する

ローカル git フォルダーのフォルダーを、PHP サーバーによって処理されているディレクトリに配置します。 その後、コマンド プロンプトを開き、同じディレクトリを対象にして、「php composer.phar install」と入力します。

サンプルを実行する

このサンプルでは、"." フォルダーにテスト ファイルを作成します。 サンプル プログラムは、Blob Storage にテスト ファイルをアップロードし、コンテナー内の BLOB を一覧表示し、新しい名前を付けてファイルをダウンロードします。

サンプルを実行します。 次の出力は、アプリケーションを実行するときに返される出力の例です。

Uploading BlockBlob: HelloWorld.txt
These are the blobs present in the container: HelloWorld.txt: https://myexamplesacct.blob.core.windows.net/blockblobsleqvxd/HelloWorld.txt

This is the content of the blob uploaded: Hello Azure!

表示されるボタンを押すと、サンプル プログラムによってストレージ コンテナーとファイルが削除されます。 続行する前に、サーバーのフォルダーで 2 つのファイルをチェックします。 それらを開いて、同じであるかどうか確認します。

Azure Storage Explorer などのツールを使って、Blob Storage のファイルを表示することもできます。 Microsoft Azure Storage Explorer は無料のクロスプラットフォーム ツールであり、ストレージ アカウントの情報にアクセスできます。

ファイルを確認した後、任意のキーを押してデモを終了し、テスト ファイルを削除します。 サンプルの機能がわかったら、example.rb ファイルを開いてコードを確認します。

サンプル コードを理解する

次に、サンプル コードを実行して、そのしくみを理解できるようにします。

ストレージ オブジェクトへの参照を取得する

最初に、Blob Storage にアクセスして管理するために使うオブジェクトへの参照を作成します。 これらのオブジェクトはお互いを基にして作成され、各オブジェクトは、一覧で次にあるオブジェクトによって使われます。

  • Azure Storage の BlobRestProxy オブジェクトのインスタンスを作成して、接続資格情報をセットアップします。
  • お使いのストレージ アカウント内の BLOB サービスを参照する BlobService オブジェクトを作成します。
  • アクセスしているコンテナーを表す Container オブジェクトを作成します。 コンテナーは、コンピューターでフォルダーを使ってファイルを整理するのと同じように、BLOB を整理するために使われます。

blobClient コンテナー オブジェクトを作成した後は、関心がある特定の BLOB を参照する Block BLOB オブジェクトを作成することができます。 その後、アップロード、ダウンロード、コピーなどの操作を行うことができます。

重要

コンテナーの名前は小文字にする必要があります。 コンテナーと BLOB の名前の詳細については、「コンテナー、BLOB、メタデータの名前付けと参照」を参照してください。

このセクションでは、Azure Storage クライアントのインスタンスをセットアップして、BLOB サービス オブジェクトをインスタンス化し、新しいコンテナーを作成した後、BLOB がパブリックになるようにコンテナーに対するアクセス許可を設定します。 コンテナーの名前は quickstartblobs です。

    # Setup a specific instance of an Azure::Storage::Client
    $connectionString = "DefaultEndpointsProtocol=https;AccountName=".getenv('account_name').";AccountKey=".getenv('account_key');

    // Create blob client.
    $blobClient = BlobRestProxy::createBlobService($connectionString);

    # Create the BlobService that represents the Blob service for the storage account
    $createContainerOptions = new CreateContainerOptions();

    $createContainerOptions->setPublicAccess(PublicAccessType::CONTAINER_AND_BLOBS);

    // Set container metadata.
    $createContainerOptions->addMetaData("key1", "value1");
    $createContainerOptions->addMetaData("key2", "value2");

    $containerName = "blockblobs".generateRandomString();

    try    {
        // Create container.
        $blobClient->createContainer($containerName, $createContainerOptions);

BLOB をコンテナーにアップロードする

Blob Storage は、ブロック BLOB、追加 BLOB、およびページ BLOB をサポートします。 最もよく使われるのはブロック BLOB であり、このクイックスタートでもそれを使います。

ファイルを BLOB にアップロードするには、ローカル ドライブ上でディレクトリ名とファイル名を結合することにより、ファイルの完全なパスを取得します。 createBlockBlob() メソッドを使用して、指定したパスにファイルをアップロードできます。

サンプル コードでは、ローカル ファイルを受け取り、Azure にアップロードします。 ファイルは myfile として格納されており、BLOB の名前はコードでは fileToUpload となっています。 次の例では、ファイルを quickstartblobs という名前のコンテナーにアップロードします。

    $myfile = fopen("HelloWorld.txt", "w") or die("Unable to open file!");
    fclose($myfile);

    # Upload file as a block blob
    echo "Uploading BlockBlob: ".PHP_EOL;
    echo $fileToUpload;
    echo "<br />";

    $content = fopen($fileToUpload, "r");

    //Upload blob
    $blobClient->createBlockBlob($containerName, $fileToUpload, $content);

ブロック BLOB のコンテンツの部分更新を実行するには、createblocklist() メソッドを使用します。 ブロック BLOB の最大サイズは 4.7 TB であり、Excel スプレッドシートから大きなビデオ ファイルまで何にでも使うことができます。 ページ BLOB は、主に、IaaS VM のバックアップ用の VHD ファイルに使われます。 追加 BLOB は、ファイルに書き込んでから詳細情報を追加し続ける場合などの、ログ記録に使用されます。 追加 BLOB は、単一のライター モデルで使用する必要があります。 BLOB ストレージに格納されているほとんどのオブジェクトはブロック BLOB です。

コンテナー内の BLOB を一覧表示する

listBlobs() メソッドを使用して、コンテナー内のファイルの一覧を取得できます。 次のコードは、BLOB の一覧を取得し、ループ処理して、コンテナー内に見つかった BLOB の名前を表示します。

    $listBlobsOptions = new ListBlobsOptions();
    $listBlobsOptions->setPrefix("HelloWorld");

    echo "These are the blobs present in the container: ";

    do{
        $result = $blobClient->listBlobs($containerName, $listBlobsOptions);
        foreach ($result->getBlobs() as $blob)
        {
            echo $blob->getName().": ".$blob->getUrl()."<br />";
        }

        $listBlobsOptions->setContinuationToken($result->getContinuationToken());
    } while($result->getContinuationToken());

BLOB のコンテンツを取得する

getBlob() メソッドを使用して、BLOB のコンテンツを取得します。 次のコードは、前のセクションでアップロードされた BLOB のコンテンツを表示します。

    $blob = $blobClient->getBlob($containerName, $fileToUpload);
    fpassthru($blob->getContentStream());

リソースをクリーンアップする

このクイック スタートでアップロードした BLOB が不要になった場合は、deleteContainer() メソッドを使用してコンテナー全体を削除できます。 作成したファイルが不要になった場合は、deleteBlob() メソッドを使用してファイルを削除します。

    // Delete blob.
    echo "Deleting Blob".PHP_EOL;
    echo $fileToUpload;
    echo "<br />";
    $blobClient->deleteBlob($_GET["containerName"], $fileToUpload);

    // Delete container.
    echo "Deleting Container".PHP_EOL;
    echo $_GET["containerName"].PHP_EOL;
    echo "<br />";
    $blobClient->deleteContainer($_GET["containerName"]);

    //Deleting local file
    echo "Deleting file".PHP_EOL;
    echo "<br />";
    unlink($fileToUpload);   

BLOB を使用する PHP アプリケーションを開発するためのリソース

Blob Storage を使用する PHP 開発については、以下の追加リソースを参照してください。

次のステップ

このクイック スタートでは、PHP を使ってローカル ディスクと Azure Blob Storage との間でファイルを転送する方法について学習しました。 PHP の操作の詳細を学習するには、PHP デベロッパー センターに進みます。

Storage Explorer と BLOB について詳しくは、「Storage Explorer を使用した Azure Blob Storage リソースの管理」をご覧ください。