久しぶりに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を適用したいフォルダ)のプロパティから、ディレクトリの構成で、マッピングを設定
実行可能ファイル 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バイトのハッシュ値でもアクセスできるようになるはず…・。だけどなぜか失敗。仕方がないので、データベースの特権パスワードを、再生成しました。これでめでたくアクセス成功!