【IIS5】 [HOW TO] Windows XP IIS5.1でFastCGI+PHP5環境を作ってみる

// はじめに

IISはPHP環境として動作させる上でスレッドセーフで無いライブラリの利用にISAPI拡張が適していないなど多くの要望がIISの開発チームには寄せられていたといいます。IISチームはこの点を重大に捉え、PHPをご利用になっている方々向けの支援を強化するためにZend Technologies 社との協業をしたり、IISに手を入れたりと色々と動きだしました。

// PHP動作環境の構築

ここではWindows XP SP2での方法を書きます。Vistaや2008用はもう一つのフォーラムで取り上げることにします。

また、ここでは www.php.net で提供しているPHPバイナリを利用します。Zend社のCoreはインストーラもあり、さらに簡単にできますが、敢えてここではIIS開発チームがやっている通りの方法で書いてみます。

1. IIS5.1を用意する
インストールはプログラムの追加と削除、Windowsコンポーネントの追加と削除から行います。
少なくともインターネット インフォメーション サービス(IIS)にチェックを入れる。

https://localhost にアクセスしてきちんとIISが動作していることを確認します。

2. FastCGIを入手する
WindowsXPではインストールが必要です。
https://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1300

※まだ最終製品版ではありませんので、注意。

3. FastCGIをインストールする
まずは展開します。ここではc:\fcgiに展開したものとして進めます。
コマンドプロンプトを開き、cd c:\fcgi
3-1. FastCGIをインストールする
 cscript fcgisetup.js /install
3.2. php拡張子のマッピングを行う
 cscript fcgisetup.js /r /add c:\php\php-cgi.exe PHP

4. PHPバイナリを入手する
https://www.php.net/downloads.php へアクセスいただき、FastCGIでの動作を想定してノン スレッドセーフなバイナリのZipを入手します。これを書いている現時点では 5.2.4 があります。

5. PHPバイナリを展開する
ここではC:\PHPに展開しましょう。

6. PHP.iniを作成、編集する
php-dist.ini を php.ini としてコピーする。
extension_dir を c:\php\ext に変更する。

7. 動作確認用のPHPファイルを作る
phpinfo 関数がいいでしょう。文法は無視してます、ご容赦。
メモ帳でgogo.php という名前で下記だけ書いたテキストファイルを作ります。
<?php phpinfo() ?>

8. 実際にアクセスしてみる
https://localhost/gogo.php

Windows XP環境でのPHPセットアップは従来インターネットを探すとISAPIを用いる方法が掲載されていましたが、今はFastCGIで環境をお作りいただけるようになりましたのでこちらをお勧めします。

Windowsではプロセスを実行単位としてさらにその中でスレッドが複数動く構造になっていますが、PHPの動作環境としてISAPIで動作させるとPHPのアプリケーションはインプロセスすなわち、それぞれスレッドという空間で動作する仕組みになります。この場合、PHP関連のライブラリで1つのプロセス内の複数スレッドで動作することを想定したつくりになっていないと問題が発生する原因になります。一方でCGIの形態で動作させることも可能で、この場合には今度Windows環境ではパフォーマンスに大きく影響のあるリクエスト毎のプロセス起動というコストの高いオーバーヘッドを抱えてしまい、実行スピードに影響が出ます。この状況から長い間、PHPを利用している方々からIISの開発チームにはちゃんと対応してという声が多く寄せられていました。今回 まだ製品版ではありませんが、提供されたFastCGI対応モジュールはこの二つの問題を解決するものです。FastCGIはプロセスを一旦起動するとそれを次回の利用のためにプールする仕組みで動作しますので、後者の起動オーバーヘッドがない、プロセス毎に動作しますのでスレッドセーフでない点もクリアになり、今までよりも安定して速い環境を提供できるようになります。

実際のサイトを設定するにはindex.php を既定のドキュメントに追加するとか色々あると思いますが、その辺も含めてまた書きます。