書籍転載
|
|
Page1
Page2
|
○[2]画像アップロード&アルバム表示のコードを記述する
新規のAlbum.phpを作成し、リスト7-4のようなコードを記述します。
|
|
リスト7-4 Album.php |
大まかなコードの流れはリスト内のコメントを参照頂くとして、以下ではブロブ操作に関わる部分をいくつかのブロックに分けて解説していきます。
コンテナを作成する
最初に、ブロブの保存先となるコンテナ(ここではphpimages)を作成します。containerExistsメソッドでコンテナの存在チェックをした後、存在しない場合にのみcreateContainerメソッドでコンテナを作成します。
|
|
構文 createContainerメソッド | |
$container:コンテナ名 $meta:メタデータ(キー/値の連想配列) |
メタデータにマルチバイト文字などが含まれている場合には、urlencode関数でエンコード処理を忘れないようにしてください。
また、エンドユーザが配下のブロブにアクセスできるよう、setContainerAclメソッドで公開アクセス権限をコンテナに付与しておきます。
|
|
構文 setContainerAclメソッド | |
$container:コンテナ名 $acl:アクセス許可レベル(ACL_PRIVATE|ACL_PUBLIC) |
サンプルでは簡略化のために処理の最初にコンテナの作成処理を行っていますが、実際のアプリケーションでは、余計なオーバヘッドを課すべきではありません。セットアップスクリプトなどを用意し、必要なコンテナ/テーブルなどはあらかじめ作成しておくようにするべきでしょう*23。
*23 もちろん、Cloud Strage Studioなどから手動で作成しても構いません。 |
アップロードファイルをブロブにアップロードする
は[アップロード]ボタンからポストされた場合の処理です。アップロードされたファイルを更にブロブにアップロードするには、putBlobメソッドを利用します。
|
|
構文 putBlobメソッド | |
$container:コンテナ名 $blob:ブロブ名 $local:アップロードするファイル名 $meta:メタデータ(キー/値の連想配列) $add:追加のヘッダ情報 |
ブロブ名(引数$blob)には、uniqid関数で「YYYYMMDDHHmmSS_.」(日付)で始まる一意な名前を割り当てます*24。
アップロードするファイル名(引数$local)は、スーパーグローバル変数$_FILESのtmp_nameキーにセットされていますので、これをそのまま引き渡すだけです*25。
*24 ファイル名の重複に備えて、元のアップロードファイル名は使いません。オリジナルの名前を維持したいならば、メタデータに保存しても良いでしょう。 |
*25 ただし、本書ではサンプルの簡単化を優先して、画像以外のファイルをアップロードした場合にも特にエラーなどは発生させていません。実際のアプリケーションでは、入力データの検証は欠かせません。 |
ブロブの一覧を取得する
コンテナ配下のブロブリストを取得するには、listBlobsメソッドを呼び出すだけです。listBlobsメソッドは、戻り値としてMicrosoft_WindowsAzure_Storage_BlobInstanceオブジェクト(ブロブ本体)の配列を返します。
ここではforeachループで順に配列からブロブを取り出し、その属性情報を列挙しているわけです。ただし、メタデータはデフォルトでは取得されませんので、getBlobMetaDataメソッドで個別に取得している点に注意してください。
|
|
構文 getBlobMetaDataメソッド | |
$container:コンテナ名 $blob:ブロブ名 |
その他、Microsoft_WindowsAzure_Storage_BlobInstanceオブジェクトでアクセス可能なメンバについては、P.456(※本転載では割愛)も合わせて参照してください*26。
*26 本来は取得した数値の小数点を切り捨てたり、日付を日本標準時に変更したりすべきですが、本項では割愛しています(以降も同様)。 |
○[3]サンプルの動作を確認する
以上の手順を終えたら、開発ファブリックでサンプルを実行してみましょう。本稿冒頭の図のようなページが表示されたら、ローカルマシンの画像ファイルが正しくアップロードできること、アップロードされた画像ファイルが正しく一覧表示できることを確認してください。
また、ストレージエクスプローラからも作成されたブロブ情報を確認しておきましょう。
図7-21:phpimagesコンテナ配下のブロブを確認 |
ブロブの内容を確認するには、該当するブロブを右クリックし、表示されたコンテキストメニューから[View in Browser]を選択します。
●クラウド環境への移行
ストレージアクセスを伴うサービスをクラウド環境に移行するには、あらかじめストレージアカウントを登録した上で、接続文字列の設定を行う必要があります*27。ストレージアカウントの登録については、P.48(※本転載では割愛)で解説済みですので、合わせて参照してください。
*27 デフォルトでは、無条件に開発ストレージに接続する設定になっています。 |
接続文字列を設定するには、PHPエクスプローラから該当するクラウドサービスプロジェクトのプロパティシートを開き、左ツリーから[Windows Azure]−[Service Configuration]を選択します。
図7-22:[<プロジェクト名>のプロパティ]ダイアログ |
[RoleSettings]欄から該当するロール(ここでは「WebRole」)を選択し、[編集]ボタンをクリックします。
図7-23:[Add Role Element]ダイアログ |
[Add Role Element]ダイアログが開きますので、[ConfigurationSettingsGroup]欄から、それぞれAzureCloudStorageAccountName(アカウント名)、AzureCloudStorageAccountKey(アカウントキー)を入力してください。
以上でストレージ接続の準備は完了ですので、「PHP+Azureアプリケーションの基本」の「[5]クラウド環境にプロジェクトを発行する」の要領でクラウド環境にアップロードし、正しくストレージにアクセスできることを確認してください。
■
INDEX | ||
[書籍転載]Windows Azure 実践クラウド・プログラミング for C#/Visual Basic/PHP | ||
PHPでWindows Azureブロブ・ストレージを活用しよう | ||
1.ブロブストレージ利用の基本 | ||
2.クラウド環境への移行 | ||
「Windows Azure 実践クラウド・プログラミング for C#/Visual Basic/PHP」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|