特集:PHP on Windows Azure

PHP開発者もクラウド開発を始めよう!

デジタルアドバンテージ 一色 政彦
2009/07/28
Page1 Page2 Page3 Page4

Visual Studioでのクラウド・サービス・プロジェクトの作成

 Visual StudioのIDEを起動し、メニュー・バーから[ファイル]−[新規作成]−[プロジェクト]を選択する。これにより、次の画面の[新しいプロジェクト]ダイアログが表示される。

[新しいプロジェクト]ダイアログによるクラウド・サービス・プロジェクトの作成

 [プロジェクトの種類]のツリー表示から[Visual C#]もしくは[Visual Basic]−[Cloud Service]を選択し、[テンプレート]の一覧から[Cloud Service]を選択した状態で[OK]ボタンをクリックする。これにより、次の画面の[New Cloud Service Project]ダイアログが表示される。

[New Cloud Service Project]ダイアログによるロールの追加

 このダイアログでは、プロジェクトに作成するロール(Role)を追加できる。ロールとは、Windows Azure上で管理されるアプリ/プログラムの種類(=役割)である。そして、そのロールの1つのインスタンス(=実体)が、1つの仮想マシン(VM:Virtual Machine)に該当する(仮想マシンのインスタンスを自由に増やしてスケールできる)。このロールには、現時点で以下の3種類がある。

  • ASP.NET Webロール:主にASP.NET Webアプリ用
  • Workerロール:主に.NETによるバックグランド処理用
  • CGI Webロール:主にPHPなどのFastCGI Weアプリ用

 厳密には、ロールには「Webロール」(=Weアプリ用)と「Workerロール」(=バックグランド処理用)の2種類しかない。「ASP.NET Webロール」と「CGI Webロール」は、生成されるひな型コードがASP.NET向けか、FastCGI向けかという点が異なる。

 今回はPHP開発なので、[New Cloud Service Project]ダイアログの左側の[Roles:]一覧から「CGI Web Role」([Visual Basic]や[Visual C#]というグループはどちらでもよい)を選択した状態で、中央の[>]ボタンをクリックする。これにより、右側の[Cloud Service Solution:]一覧に「CGI Web Role」が1つ追加される。

 最後に[OK]ボタンをクリックすると、次の画面のようにプロジェクトが作成される。

作成されたPHP開発用クラウド・サービスのプロジェクト群([ソリューション エクスプローラ])

 この画面の例では、「CloudService1」というソリューションの中に、クラウド・サービス・プロジェクトの「CloudService1」と、CGI Webロール・プロジェクトの「WebCgiRole1」が作成されている

PHP実行環境のインポート

 Windows Azure上でのPHPアプリの実行にはPHP実行環境が使われるが、Windows Azure内にはそのPHP実行環境は含まれていない。そのため、開発者側でWindows Azure上に配置しなければならない。そこでまず、先ほどダウンロードした「php」フォルダを、WebCgiRole1プロジェクトにインポートする。

 インポートするには、次の画面のように[ソリューション エクスプローラ]の「WebCgiRole1」プロジェクトの上に、「php」フォルダをドラッグ&ドロップするだけだ。

ドラッグ&ドロップによるPHP実行環境のインポート

PHP設定ファイルの有効化と設定編集

 PHP実行環境の動作を決めるのは、設定ファイル「php.ini」の役割だ。このファイルは、「php.ini-development」(開発用)と「php.ini-production」(製品用)の2種類が提供されている。今回はこのうち、「php.ini-production」をコピーして(=[ソリューション エクスプローラ]で該当ファイルを選択して[Ctrl]+[C]キーを押して[Ctrl]+[V]キーを押し)、コピーした方のファイルの名前を「php.ini」に変更すればよい。

 そして、[ソリューション エクスプローラ]で、その「php.ini」ファイルを選択している状態で、[プロパティ]ウィンドウの[ビルド アクション]を「コンテンツ」に変更する。なお、Windows Azure上に配置すべき.EXE/.DLLファイル群はすべて、[ビルド アクション]が「コンテンツ」になっている必要がある。これらのファイルは、通常、インポート時に自動的に「コンテンツ」になっているはずだ。

 あとは、php.iniファイルの内容を状況に合わせて設定すればよい。例えば本稿では、次のコードの太字部分を追記した。

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
……省略……

; cgi.force_redirect is necessary to provide security running PHP as a CGI under
; most web servers.  Left undefined, PHP turns this on by default.  You can
; turn it off here AT YOUR OWN RISK
; **You CAN safely turn this off for IIS, in fact, you MUST.**
; http://php.net/cgi.force-redirect
;cgi.force_redirect = 1
cgi.force_redirect = 0

……省略……
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
;cgi.fix_pathinfo=1
cgi.fix_pathinfo=1

; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate
; security tokens of the calling client.  This allows IIS to define the
; security context that the request runs under.  mod_fastcgi under Apache
; does not currently support this feature (03/17/2002)
; Set to 1 if running under IIS.  Default is zero.
; http://php.net/fastcgi.impersonate
;fastcgi.impersonate = 1;
fastcgi.impersonate = 1

……省略……
;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =
date.timezone = Asia/Tokyo

……省略……
PHP設定ファイル(php.ini)の編集例
「cgi.force_redirect」「cgi.fix_pathinfo」「fastcgi.impersonate」ディレクティブについては後述。「date.timezone」ディレクティブはdate関数群で使われるデフォルトのタイムゾーンを定義している。

 さらに、PHPプログラムを動作させるためには、いくつかの設定が必要となる。


 INDEX
  [特集] PHP on Windows Azure
  PHP開発者もクラウド開発を始めよう!
    1.PHP開発でWindows Azureを利用する理由
  2.PHPによるWindows Azureクラウド・サービスの開発(1)
    3.PHPによるWindows Azureクラウド・サービスの開発(2)
    4.PHPアプリをWindows Azureに乗せるコツ
Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ

.NET未来展望台

未来展望台コーナースポンサーからのお知らせ


- PR -
- PR -
ソリューションFLASH

「ITmedia マーケティング」新着記事

米司法省がGoogleに「Chrome」売却要求 広告業界への影響は?
米司法省によるGoogleへのChrome売却要求は、リテールメディアネットワークに恩恵を与え...

トランプ氏勝利で追い風 ところでTwitter買収時のマスク氏の計画はどこへ?――2025年のSNS大予測(X編)
2024年の米大統領選挙は共和党のドナルド・トランプ氏の勝利に終わった。トランプ氏を支...

AI導入の効果は効率化だけじゃない もう一つの大事な視点とは?
生成AIの導入で期待できる効果は効率化だけではありません。マーケティング革新を実現す...