IIS+PHP5+Mysql5の設定

久しぶりにIISサーバの設定変更をした時のメモ。
今回は、PHP4からのアップデートをしかけて、大いに悩みました。その顛末です。


[インストールしたサーバ]

 WindowsServer2003
 IIS6.0
 PHP4.4.0
 Mysql5.0.45-community-nt 

[PHP5のインストール]
 php.netの説明に従い、非スレッドセーフ版の VC9 x86 Non Thread Safe(ZIP版)をダウンロードして展開

  インストール先 C:\Program Files\php\v5.4

C:\の直下などにインストールするほうが無難かもしれません。
 展開後、php.ini-developmentをコピーしてphp.iniを作成し、エントリを修正します。

 fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0

 もちろん、extensionディレクトリの設定や拡張モジュールの設定をおこないます。
 サーバシステムのプロパティにある環境変数で、インストールしたPHPフォルダへのパスを設定しておいたほうが確実かもしれません。
[FasctCGIのインストール]
 Microsoft FastCGI Extension for IIS 5.1 and 6.0からダウンロードしてインストール
 PHP5からはisapiではなく、こちらで設定することが推奨されているらしい。
 標準ならC:\WINDOWS\system32\inetsrvにインストールされる。同じディレクトリにある設定ファイルを編集
 fxgiext.iniに下記を追加

 [Tyupe]
   php=PHP54_via_FastCGI
[PHP54_via_FastCGI]
ExePath="C:\Program Files\PHP\v5.4\php-cgi.exe"
InstanceMaxRequests=10000
ActivityTimeout=600
RequestTimeout=600
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000,PHPRC:C:\Program Files\PHP\v5.4

php.netの記述によれば、fcgiconfig.jsコマンドで作成できるらしいのだけど、何が行われているのか分かりにくくて、結局手動で編集しました。
[IISマネージャによるプロパティ設定]
 IISマネージャを起動し、規定のWebサイト(もしくはPHP5を適用したいフォルダ)のプロパティから、ディレクトリの構成で、マッピングを設定
IIS_php.jpg

 実行可能ファイル   C:\WINDOWS\system32\inetsrv\fcgiext.dll
 拡張子         GET,HEAD,POST

設定したら、アプリケーションプールをリサイクル(再起動)するか、規定のWebサーバ自体を再起動させる。
これで.phpのファイルに対しては、fasetcgii経由でPHP5が起動されるはず。<?php phpinfo() ?>などで確認できる。
これでMysqlサーバにもアクセスできるはず、とおもったら、ここに落とし穴がありました。PHP4からアクセスできても、PHP5からではデータベースに接続できないのです!なんで!?
どうやらMysqldで利用されているパスワードのハッシュ値がPHP4の16バイトから、php5では41バイトに拡張されてるらしい。それで同じバスワードで接続しようとしても、別ハッシュとなってしまうらしいのです。
[Mysqlの設定]
 
 my.iniを編集し、下記を有効化する

Olapassword=Off 

 
 これで16バイトのハッシュ値でもアクセスできるようになるはず…・。だけどなぜか失敗。仕方がないので、データベースの特権パスワードを、再生成しました。これでめでたくアクセス成功!