今回はAzure のBLOBストレージをPHPから利用する方法を紹介します。
流れとしては、composerをインストールしてそこから利用する流れとなります。
事前準備
Azureストレージ上に「ストレージアカウント」と「コンテナー」を作成する必要があります。
1. ストレージアカウントの作成
左下新規メニューから「ストレージ」>「簡易作成」をクリックして作成します。
URLはグローバルでユニークである必要があります。
場所も国内で利用する場合は国内に変更しましょう。
2. コンテナーの作成
出来上がった” ストレージアカウント”の詳細に遷移します。
タブメニューの「コンテナー」に遷移し、「コンテナーを作成する」をクリックします。
任意の名称を入れてコンテナーを作成します。
操作編
1. phpから操作するためのcomposerのインストールを行います。 プロジェクトがあるディレクトリに遷移し、composerをダウンロードします。
1 2 |
$ cd DocumentRoot $ curl -sS https://getcomposer.org/installer | php |
composer.jsonを作成します。
※requireの部分が無くても出来る場合もあるそうですが、下記にある様なエラーが発生して失敗する場合があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ vim composer.json { "require":{ "microsoft/windowsazure":"*" }, "repositories": [ { "type": "pear", "url": "http://pear.php.net" } ], "require": { "pear-pear.php.net/mail_mime" : "*", "pear-pear.php.net/http_request2" : "*", "pear-pear.php.net/mail_mimedecode" : "*", "microsoft/windowsazure": "*" }, "minimum-stability":"dev" } |
※エラー例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Loading composer repositories with package information Initializing PEAR repository http://pear.php.net Installing dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - microsoft/windowsazure v0.4.0 requires pear-pear/http_request2 * -> no matching package found. - microsoft/windowsazure dev-storage-2012-02-12 requires pear-pear/http_request2 * -> no matching package found. - microsoft/windowsazure dev-master requires pear-pear2.php.net/http_request2 * -> no matching package found. - microsoft/windowsazure dev-dev requires pear-pear2.php.net/http_request2 * -> no matching package found. - Installation request for microsoft/windowsazure * -> satisfiable by microsoft/windowsazure[dev-dev, dev-master, dev-storage-2012-02-12, v0.4.0]. Potential causes: - A typo in the package name - The package is not available in a stable-enough version according to your minimum-stability setting see <https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> for more details. Read <http://getcomposer.org/doc/articles/troubleshooting.md> for further common problems. |
composerをインストールします。
インストールに成功するとlsで見るとvendorが追加されていることが確認できます。
1 2 3 4 5 6 7 |
$ sudo php composer.phar install $ ls –l total 1084 -rw-r--r-- 1 root root 429 Mar 18 17:09 composer.json -rw-r--r-- 1 root root 13255 Mar 18 17:11 composer.lock -rw-r--r-- 1 admin admin 1074598 Mar 18 16:40 composer.phar drwxr-xr-x 6 root root 4096 Mar 18 17:11 vendor |
2. プログラム側に実装します。
3以降に目的別のアクションについて記載しておりますが、どのアクションでもこの部分については共通で最初に1回呼び出す必要があります。
1 |
$ vim blob-test.php |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php require_once 'vendor/autoload.php'; use WindowsAzure\Common\ServicesBuilder; use WindowsAzure\Common\ServiceException; $primaryAccessKey = "Azureポータルから取得"; $blobAccountName = "事前準備1のアカウント名"; $containerName = "事前準備2のコンテナー名"; $connectionString = "DefaultEndpointsProtocol=https;AccountName=".$blobAccountName.";AccountKey=".$primaryAccessKey; $blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString); |
アクセスキーの取得は以下の方法で行えます。
Azureポータルの「ストレージ」に遷移します。
一覧からキーを取得したいストレージ名をクリックし、「アクセスキーの管理」をクリックします。
ポップアップ画面の「プライマリーアクセスキー」の文字列を取得します。
1 |
$ php blob-test.php |
で実行して特にエラーが表示されなければ成功です。
念の為、最後の行に「var_dump($blobRestProxy);」を追加して情報が出力されれば間違いありません。
3. ファイルをアップする
変数$fileがアップロードしたいファイル名とします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$content = fopen($file, "r"); $blob_name = $file; try { // Upload blob $blobRestProxy->createBlockBlob($containerName, $blob_name, $content); } catch(ServiceException $e){ // Error codes and messages are here: // http://msdn.microsoft.com/ja-jp/library/windowsazure/dd179439.aspx $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />"; } |
4. ファイルを確認する
変数$fileがアップロードしたいファイル名とします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
try { // List blobs. $blob_list = $blobRestProxy->listBlobs($containerName); $blobs = $blob_list->getBlobs(); foreach($blobs as $blob) { echo $blob->getName().": ".$blob->getUrl()."\n"; } } catch(ServiceException $e){ // Error codes and messages are here: // http://msdn.microsoft.com/ja-jp/library/windowsazure/dd179439.aspx $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />"; } |
ファイルアップロード後に実行すると以下の様になります。
1 2 |
$ php blob-test.php $file: https://${blobAccountName}.blob.core.windows.net/${containerName}/${file} |
※実際は変数でなく出力後のデータとなります。
5. ファイルをダウンロードする
変数$fileがダウンロードしたいファイル名とします。
1 2 3 4 5 6 7 8 9 10 11 12 |
try { // Get blob. $blob = $blobRestProxy->getBlob($containerName, $file); fpassthru($blob->getContentStream()); } catch(ServiceException $e){ // Error codes and messages are here: // http://msdn.microsoft.com/ja-jp/library/windowsazure/dd179439.aspx $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />"; } |
6. ファイルを削除する
変数$fileが削除したいファイル名とします。
1 2 3 4 5 6 7 8 9 10 11 |
try { // Delete blob. $blobRestProxy->deleteBlob ($containerName, $file); } catch(ServiceException $e){ // Error codes and messages are here: // http://msdn.microsoft.com/ja-jp/library/windowsazure/dd179439.aspx $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />"; } |
上記の様な方法を利用することで、Webサーバのログや画像などを自動的にBLOBストレージ上にアップすることが出来ます。
次回もお楽しみに!!