PHPをIISのFastCGIを使用するようにセットアップする

PHPで遊ぶための環境を構築する手順を紹介します。対象環境は以下の通りです。

PHPの配置

PHPダウンロードページからPHPのバイナリーをダウンロードします。

IISの場合はVC9を使用します。スレッドセーフ(Thread Safe)はマルチスレッド間の共有データの処理を考慮したバージョン、非スレッドセーフ(Non Thread Safe )は、マルチスレッド間の共有データの処理を考慮しないパフォーマンス優先とも言えるバージョン。PHPのインストールガイドではIISのFastCGIを使用する場合は非スレッドセーフ版が推奨されているのでここでは非スレッドセーフ(Non Thread Safe)版を使用します。

f:id:chorusde:20120509061552p:image

私が試した時点ではv5.4.3にはWindowsインストーラーがなかったので以下手動でインストールします。v5.3.xはWindowsインストーラーが用意されていますのでそっちを使った方が楽かもしれません。ちなみにPHPのダウンロードバイナリに含まれるinstall.txtには勉強のためにも手動インストールをぜひ試してねと書いてありますが私は楽をしたいです。

ダウンロードしたzipファイルを解凍し得られたフォルダ名を"php"に変更し、任意の場所に配置します。パスにスペースが含まれると正常に動作しません。ここでは"C:\php"に配置します。

次にphp5ts.dllと言うファイルをWebサーバが使用できるようにする必要があります。install.txtには3つの方法があります。

  1. php5ts.dllをWindowsのシステムディレクトリ(例:C:\Windows\System32)にコピー
  2. php5ts.dllをWebサーバのディレクトリにコピー
  3. phpのインストールディレクトリ(C:\php)にパスを通す

PCの再起動が必要になるので面倒ですが、ここでは将来のアップグレードが簡単になるとの理由からinstall.txtで推奨されている3の方法を選択します。

  1. Windowsのスタートメニューから[コンピュータ]を右クリックして[プロパティ]を選択します。
  2. [設定の変更]をクリックしてシステムのプロパティダイアログを開きます。
  3. [詳細設定]タブを選択し、[環境変数]をクリックします。
  4. システム環境変数から変数名が"Path"となっている変数を選択し[編集]をクリックします。
  5. 変数値の最後に、";"(例:";C:\php")を追加して[OK]を押しまくってダイアログをすべて閉じます。

f:id:chorusde:20120509061927p:image

このあとコンピュータを再起動します。

php.iniファイルを作成します。ダウンロードしたPHPバイナリ内にテンプレートとしてphp.ini-developmentとphp.ini-productionが含まれています。install.txtではセキュリティやパフォーマンスの利点からphp.ini-productionを使用することを推奨していますが、今回はPHPで遊びたいだけなのでphp.ini-developmentを使用します。

php.ini-developmentを同じディレクトリにコピーしてファイル名を"php.ini"に変更します。php.iniについては勉強不足なのでここではインストールガイドにある必須項目のみ変更します。環境や用途に応じて必要な設定変更についてご自身で確認することをお勧めします。なお設定を変更する場合、行頭のセミコロン";"によるコメントアウトを削除して値を設定します。

extension_dir
拡張モジュールのディレクトリへのパスを絶対もしくは相対パスで指定します。

extension_dir = "C:\PHP\ext"

log_errors
PHPのログ出力機能の有効化・無効化を設定します。php.ini-developmentではデフォルトでONになっていました。

log_errors = On

error_log
PHPのログの出力先を指定します。ウェブサーバから書き込み可能なファイルを絶対もしくは相対パスで指定します。

error_log = "C:\inetpub\temp\php-errors.log"

cgi.force_redirect
PHPのディレクトリセキュリティ機能の有効化・無効化を設定します。IISでは無効化("=0")されている必要があります。

cgi.force_redirect = 0

cgi.fix_pathinfo
PHPにCGI仕様に基づくpath info へのアクセスを許可・制限します。IISのFast CGIを使用する場合は有効化します。

cgi.fix_pathinfo = 1

fastcgi.impersonate
Fast CGIの匿名化を有効化・無効化します。IISでFast CGIを使用する場合は有効化が推奨されています。これによってIIS認証で定義したユーザ(デフォルトではIUSR)によってPHPのファイル操作が実行されます(つまりIUSERにPHPによって実行されるファイル操作を行うために必要な権限を付与する必要があります)。

fastcgi.impersonate = 1

fastcgi.logging
FastCGI のログ機能の有効化・無効化を設定します。IISのFast CGIを使用する場合は無効化します。

fastcgi.logging = 0

IISへの設定

IIS での FastCGI を有効化します。

Windowsのコントロールパネルを開き[プログラムと機能]を選択し、[Windows の機能の有効化または無効化]をクリックして、Windowsの機能ダイアログを開きます。[インターネットインフォメーションサービス] > [World Wide Web サービス] > [アプリケーション開発機能]と展開して、[CGI]にチェックをいれ[OK]をクリックして機能をインストールします。

f:id:chorusde:20120509062818p:image

PHP用のIISハンドラマッピングを作成します。IISマネージャを開きホームのIISセクション内にある[ハンドラーマッピング]をクリックします。操作ペインの[モジュール マップの追加]をクリックしてモジュール マップの追加ダイアログを開きます。モジュール マップの追加ダイアログに以下のように入力します。

  • 要求パス:*.php
  • モジュール:FastCgiModule
  • 実行可能ファイル:C:\"PHP をインストールしたパス"\php-cgi.exe
  • 名前:PHP_via_FastCGI

f:id:chorusde:20120509063015p:image:w400

要求の制限をクリックし、要求のマップ先がファイルまたはフォルダーのみハンドラーを呼び出すように設定します。

f:id:chorusde:20120509063114p:image:w400

[OK]や[はい]を押しまくってすべてのダイアログを閉じます。

動作確認

Webルートディレクトリ(例:"C:\inetpub\wwwroot")に"test.php"と言うファイルを作成し、以下のように記述して保存します。

<?php phpinfo(); ?>

Webブラウザに"http://localhost/test.php"とURLを入力し、PHPの情報が表示されれば設定完了です。

f:id:chorusde:20120509063115p:image:w500