信州FM
信州FMモバイル




blog.C#

■Vista(x64) + IIS7.0 + PHP5 + ISAPI(09-11 00:18)

Vista(x64) + IIS7.0 + PHP5 + ISAPI な環境で PHP を動かすのにかなり苦労したのでメモっておく。

ポイントとしては、 64 ビット版 OS で PHP を ISAPI を動かそうとすると、以下のようなエラーが発生するということだ。
HTTP エラー 500.0 - Internal Server Error

説明: ISAPI フィルタ "x:\PHP\php5isapi.dll" での LoadLibraryEx の呼び出しに失敗しました
エラー コード: 0x800700c1
通知: 不明
モジュール: IIS Web Core
要求された URL: http://localhost:80/
物理パス: C:\inetpub\wwwroot
ログオン ユーザー: 未定義です
ログオン方法: 未定義です
ハンドラ: StaticFile

そこで設定のポイントをまとめてみた。


◆ IIS7.0 のインストール

IIS7.0 をインストールしてない場合は、まず IIS7.0 をインストールする。
インストールするには、コントロールパネルから「プログラムと機能」 -> 「Windows の機能の有効化または無効化」を実行し、「Internet Information Services」をインストールする。


◆ PHP5 のインストールと設定

PHP5 のバイナリを http://www.php.net/downloads.php からダウンロードし、ローカルに展開する。
通常は「PHP 5.x.x zip package」というものをダウンロードすればよいと思う。

PHP をローカルに展開したら、 php5ts.dll を Windows フォルダ (ex: C:\Windows) にコピーする。 Windows フォルダにコピーするのが嫌であれば、環境変数 PATH にローカルに展開した PHP のパスを書く。個人的には環境変数に書く方法をおすすめする。PHP をバージョンアップする際などにフォルダの置換のみですむからだ。

次は php.ini-dist をコピーして php.ini を作成する。セキュリティを重視するのであれば、 php.ini-dist ではなく php.ini-recommended をコピーすべきであろう。
作成した php.ini を開き、必要であれば、 「extensions_dir」や「extension=php_mbstring.dll」の部分を適宜変更する。

適宜設定した php.ini は決められた場所に配置する必要がある。例えば、 Windows フォルダ (ex: C:\Windows) に配置する方法があるが、個人的にはレジストリに php.ini のあるフォルダのパスを書く方式の方がよいと思う。
レジストリキーは以下のようになる。
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath
ただし、ここで注意することがあり、後述の「IIS7.0 の設定」で 32 ビットアプリケーションを WOW64 モードとして動くように設定した場合は、レジストリキーが以下のように変わる。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\PHP\IniFilePath
「IniFilePath」キーは文字列値で、ここに php.ini が存在するフォルダのパスを書く。私が試した範囲ではパスの区切り文字は "\" で動作した。


◆ IIS7.0 の設定

IIS7.0での設定方法の一例を示す。
コントロールパネルを開いて、「管理ツール」 -> 「インターネット インフォメーション サービス (IIS) マネージャ」を開く。 (クラシック表示の場合)
IISを管理するためのウィンドウが開くので、左側のツリーのトップのホスト名の部分を選択する。右ペインにある「ISAPI フィルタ」を実行し、追加を選択する。
ここでは、以下のようにしておく。
フィルタ名: php (これはわかれば何でもよい)
実行可能ファイル: ローカルに展開したphpフォルダにある php5isapi.dll のパス

次に、左ツリーのトップのホスト名の部分を選択し、右ペインにある「ハンドラ マッピング」を実行する。「スクリプトマップの追加」を選択し、以下のように設定する。
要求パス: *.php
実行可能ファイル: ローカルに展開したphpフォルダにある php5isapi.dll のパス
名前: php (これはわかれば何でもよい)
この設定で OK を押すと「このISAPIを有効にしますか?・・・(略)・・・」というメッセージが出るが、ここでは「はい」を選択してかまわない。「はい」を選択すると、「ISAPI と CGI の制限」に設定が追加される。

次は左ツリーの「アプリケーション プール」を選択し、右ペインに出てくるものから、 php スクリプトを実行したい Web サイトで設定されているアプリケーションプールを選択して、「詳細設定」を開く。既定の状態だと「DefaultAppPool」になってると思うので、通常はこれを選択して「詳細設定」を開けばよい。
「詳細設定」を開くと、「32 ビット アプリケーションの有効化」」というのがあるので「true」に設定する。この設定は 32 ビットアプリケーションを WOW64 モードで動かすようにするためのもので、この設定を行わないと IIS7.0 を起動するときに php5isapi.dll のロードに失敗し、冒頭に書いたようなエラーが発生する。

以上の設定で、 phpinfo() のみを書いた php ファイルをブラウザから見れば、おそらく PHP が動作していることが確認できるだろう。


◆ おまけ

Windows Server 2008 では、 ISAPI だけでなく FastCGI という選択肢も増える。
興味のある人は以下のサイトもチェックしてみるいいかも。
 [HOW TO] IIS7.0でFastCGI+PHP5環境を作ってみる - http://forums.microsoft.com/TechNet-JA/ShowPost.aspx?PostID=2113684&SiteID=36





コメント(1)・トラバ(1)

前へ 一覧へ


信州FMモバイルトップ
(C)信州FM