モバイルアプリを Azure で作る - データを扱う Azure Storage を利 してデータを保存する 本稿では PHP と Windows Azure を使って 画像などのファイルを扱うアプリケーションを開発する方法を説明します Windows Azure Platform では データの保存先に Azure Storage サービスか SQL Azure を利 するのが 般的です SQL Azure は SQL を実 する RDBMS です オンプレミスの SQL Server と同じ方法でアクセスすることができるため 基本的には従来の書き方のまま接続先を SQL Azure に変更するだけでかまいません 方 Azure Blob(Azure Storage サービス ) は ファイルを扱うストレージサービスではあるものの 般的なファイルシステムのように利 できるわけではありません Azure Blob の操作は HTTP REST インタフェースを利 して います PHP から簡単に使えるようにこれを抽象化した Windows Azure SDK for PHP(http://phpazure.codeplex.com/) という API が 意されています この API 特有のメソッドで操作しなければいけないと思われがちですが カスタムストリームラッパーが 意されているため 少し変更するだけで fopen や fread fwrite file_get_contents file_put_contents などの従来のファイルシステム関数を利 することができます 本稿では Windows Azure SDK for PHP のストリームラッパーを利 して Azure Blob への読み書きをする方法を紹介します PHP の実 と開発環境について 本稿での PHP の実 と開発環境については 事前に準備がされているものとします 環境構築については Windows Azure で PHP を実 する各種資料を参考にしてください 本稿では以下の環境で動作を確認しています Windows 7 Ultimate Edition(64bit) Windows Azure SDK 1.4 Windows Azure SDK for PHP v3.0.0beta PHP 5.3.6 Azure Storage サービスの準備 本稿のプログラムを Windows Azure 上で実 するには Azure Storage の初期設定がされている必要があります Windows Azure ポータル (https://windows.azure.com/) で Storage Account を作成しておいてください 開発環境で実 するには Storage Emulator が起動されている必要があります [ スタート ] メニュー - [ すべてのプログラム ] - [Windows Azure SDK v1.4] - [Storage Emulator] を起動してください
Azure Storage へのコンテナの作成とサンプルファイルの配置 本稿のサンプルで利 するファイルを Azure Storage にコピーします 今回は 本番環境の Azure Storage と開発環境の Development Storage の両方に対応する Azure Storage Explorer を利 します Azure Storage Explorer は http://azurestorageexplorer.codeplex.com/ から入手してください 1. Azure Storage Explorer を起動し [Add Account] をクリックします 2. Add Storage Account ダイアログで Azure ストレージのアカウント名とキーを入 します 開発環境の場合は Developer Storage をチェックします 3. コンテナを作成します Container ツールボタンの New をクリックし 適当なコンテナ名を入 します (ex. sample) Accessibility は今回は Private を選択します 4. 作成したコンテナを選択し Blob ツールボタンの New をクリックします 5. New Blob ダイアログで以下を入 します Blob name: 任意のファイル名 (ex. samplefile.txt) Blob Type: Block Blob を選択 Initial text content: ファイルの内容となる適当なテキスト
6. 以上で Azure Blob にファイルが作成されました
Windows Azure SDK for PHP の配置 http://phpazure.codeplex.com/releases/ から最新版の Windows Azure SDK for PHP をダウンロードして解凍し library\microsoft フォルダをプロジェクトの任意の場所にコピーします WebRole のフォルダ構成例 + WebRole + bin\ + php\ + php-cgi.exe + php.ini : + lib\ + Microsoft\ ここにコピー : + index.php + web.config : Windows Azure Tools for Eclipse を使っている場合 デフォルトで作られている WindowsAzureSDKForPHP フォルダに SDK のファイルが存在します これを利 する場合 バージョンが古い可能性があるので注意してください Azure Blob にアクセスするためにストリームラッパーを登録 いよいよプログラムを書いていきます まず 必要な SDK を読み込みます // include_path を指定します Windows Azure Tools for Eclipse のデフォルトの場合は // 'lib' の代わりに 'WindowsAzureSDKForPHP' とします // php.ini で設定しても構いません set_include_path(ini_get('include_path'). PATH_SEPARATOR. './lib'); // SDK を読み込みます require_once 'Microsoft/WindowsAzure/Storage/Blob.php'; require_once 'Microsoft/WindowsAzure/RetryPolicy/NoRetry.php'; Azure ストレージアカウント情報を定義します 開発環境 (Development Fabric) の場合 Development Storage への接続情報を登録します $storageurl = Microsoft_WindowsAzure_Storage::URL_DEV_BLOB; $storageaccount = 'devstoreaccount1'; $storagekey = 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KB HBeksoGMGw==';
本番環境 (Windows Azure Fabric) の場合 Azure Storage への接続情報を登録します $storageurl = Microsoft_WindowsAzure_Storage::URL_CLOUD_BLOB, $storageaccount = 'YOURESTORAGEACCOUNT'; // YOURESTORAGEACCOUNT をアカウント名に置き換えます $storagekey = 'YOURSTORAGEACCOUNTKEY'; // YOURSTORAGEKEY をストレージキーに置き換えます Blob インスタンスの初期化し ストリームラッパーを登録します // Blob インスタンスを初期化します $cli = new Microsoft_WindowsAzure_Storage_Blob( $storageurl, $storageaccount, $storagekey, false, Microsoft_WindowsAzure_RetryPolicy_RetryPolicyAbstract::retryN(10, 250) ); // ストリームラッパーを登録します $cli->registerstreamwrapper(); テキストファイルの読み書き ここからは通常通りファイルシステム関数を利 します fopen などで指定するファイル名は azure://{ コンテナ名 }/{ ファイル名 } となります サンプルは sample.php です $file = 'azure://sample/samplefile.txt'; // 事前に作成済みのファイル $handle = fopen($file, 'r+'); // ファイルを読み書きモードでオープンします $content = fread($handle, filesize($file)); // ファイルの内容をすべて読み込みます echo '<pre>'. $content. '</pre>'; // 読み込んだファイルの内容を出 します fwrite($handle, "\n 書き込んでみます "); // ファイルに書き込みます fclose($handle); // ファイルをクローズします echo '<hr /><pre>'; readfile($file); // 変更後のファイル内容を出 します echo '</pre>'; 結果表 例 ) ブラウザで 字化けする場合は 字コードを調整してください Azure blob ストレージに保存した テキストファイルの内容です Azure blob ストレージに保存した テキストファイルの内容です 書き込んでみます
ファイルのアップロード ファイルをアップロードするには move_uploaded_file でファイルの移動先に azure://{ コンテナ名 }/{ ファイル名 } と指定します サンプルは sample2.php です echo '<form action="'. $_SERVER['PHP_SELF']. '" method="post" enctype="multipart/form-data">'. '<type="hidden" name="max_file_size" value="3000000" />'. '<input type="file" name="f" />'. '<input type="submit" name="s" />'. '</form>'; if (count($_files) > 0) { move_uploaded_file($_files['f']['tmp_name'], 'azure://sample/'. $_FILES['f']['name']); } Web ブラウザからファイルをアップロード後 Azure Storage Explorer などでファイルが作成されていることを確認してください 簡単な説明ではありましたが このように従来のファイルシステム関数で Azure Blob 上のファイルを参照 変更したり ファイルをアップロードすることができることがお分かりいただけたと思います とは言え fopen で存在しないファイルを指定すると通常であればファイルが作られるはずがエラーになってしまったり disk_free_space と disk_total_space については Warning が出てしまったりなど すべての機能が実装されているわけではありません このような制限もありますが Windows Azure SDK for PHP のストリームラッパーを利 すると 既存のオンプレミスから Windows Azure Platform へ移 する労 や 新しいノウハウを習得するための労 を最 限にすることができるので ぜひご活 ください