2004-01-12:apache/IIS + PHP on Win XP Pro SP1 [2nd]

Windows上で PHP を使う話題。Web server は apache もしくは IIS で。

このページは第一版を 2003/09/03 にリリースしていたが、PHP のバージョンアップにともない情報が古くなったため、改訂したもの。
対象の各バージョンは apache_1.3.29, php-4.3.4。

お役立ちリンク

ページ内リンク


apache編

apache のインストール

以前の apache がインストールされている場合は、アンインストールしておくこと。
[コントロールパネル]→[プログラムの追加と削除]
http://httpd.apache.org/download.cgi からapache_1.3.29-win32-x86-no_src.exe を持ってきて、ダブルクリック。
インストーラが立ち上がるので、指示通りに。とくにむずかしいことはなし。
complete でインストールしよう。

デフォルトで C:\Program Files\Apache Group\apache\ にインストールされる。
インストーラがとりあえず apache を起動してくれるので、ブラウザから http://localhost/ にアクセスして確かめる。
成功していれば「あなたの予想に反して、(略)」という例のページが出るはず。

# ひょっとしたら待ち受けポートが 8080 に設定されているかもね。
# http://localhost/ でページが出なかったら http://localhost:8080/ を試そう。

apache の起動と停止は [スタート]→[すべてのプログラム]→[Apache HTTP Server]→[Control Apache Server] 以下から行なえる。
起動の確認ができたら、とりあえず停止しておこう。

PHP のインストール

http://www.php.net/downloads.php の “Windows Binaries” には “PHP 4.3.4 zip package” と “PHP 4.3.4 installer” がある。
インストーラー版を使ってライブラリや php.ini の自動インストール、httpd.conf の自動編集、がラクなんだろうけど、どうもうまく動いていないのと、マルチバイト版を上書きする都合上、はじめからマニュアルでインストールするのがよさげ。

というわけで http://www.php.net/downloads.php の “Windows Binaries” から “PHP 4.3.4 zip package” を選んで php-4.3.4-Win32.zip をダウンロード。
解凍して出来たフォルダを C:\php-4.3.4 とでもする。
続けて http://www.geocities.jp/rui_hirokawa/php/win/ から廣川さんに感謝しつつ php-4.3.4-Win32-mb-1.1.lzh をダウンロード。
解凍したフォルダの中身をすべて選択して、C:\php-4.3.4\ 以下に上書きで移動する。

さて、C:\php-4.3.4\ のフォルダの中身を以下の様に移動(またはコピー)。

  • C:\php-4.3.4\php4ts.dll を C:\WINDOWS\system32\ へ
  • C:\php-4.3.4\dlls\* を C:\WINDOWS\system32\ へ
  • C:\php-4.3.4\php.ini-recomended を C:\WINDOWS\php.ini へ

DLL ファイルをちゃんと移動しておかないと apache が「ほにゃらら.dll がみつからない!」と怒って起動してくれない。
この apache が吐くメッセージの DLL ファイルと、みつからない DLL ファイルは違うものだったりするので要注意。

続けて移動した先の php.ini の編集。主なものは以下の感じ。

extension_dir = "C:/php-4.3.4/extensions/"
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = auto
mbstring.script_encoding = SJIS

apache の httpd.conf の修正も必要。
スタートメニューから [Configure Apache Server] を選んでメモ帳で
httpd.conf を開くか、直接
C:\Program Files\Apache Group\apache\conf\httpd.conf
をお好みのエディタで編集。
主な項目は以下の通り。

LoadModule php4_module C:/php-4.3.4/sapi/php4apache.dll
AddModule mod_php4.c
AddType application/x-httpd-php .php

どこに書くか、はいいかな。
それぞれ LoadModule とか AddModule とか AddType とか同じような項目を設定している近傍に書きましょう。

apache の再起動

無事に再起動が通ったら .php なファイルに phpinfo() とでも書いて試してみよう。

<?php
  phpinfo();
?>

IIS編

IIS のインストール

IIS はマイクロソフトの製品、というか Windows のコンポーネントの一部という位置づけなのかな。
ふつーはデフォルトでは入っていないので、明示的に入れようとしなければ組み込まれていないはず。
穴が多くて悪名高いし。とりあえず、

IIS のインストールが完全に終了するまで当該マシンを外部に晒さないこと!

ということを注意しておこう。私はだいたい内ネットのさらに内ネットで作業していたり。
わからなかったらとりあえずあなたのマシンのネットワークケーブルを引っこ抜こう。

インストールはコントロールパネルから。
[コントロールパネル]→[プログラムの追加と削除]から左側の[Windowsコンポーネントの追加と削除]を選ぶ。
[インターネット インフォメーション サービス(IIS)]というのがあるので必要なコンポーネントにチェックを入れて(いらないものはチェックをはずして)インストール。
私は FTP とか SMTP とかはいらないのでチェックをはずした。
途中、Windows XP のディスクが要求されるので用意しておくこと。

インストールが終わったら再起動

めんどくさいけど再起動は windows 文化なのでガマンガマン。

IIS の設定は[コントロールパネル]→[パフォーマンスとメンテナンス]→[管理ツール]→[インターネット インフォメーション サービス]から。
[インターネット インフォメーション サービス]を選んで開いた窓の左側のツリーをたどり「既存のWeb」のプロパティでいろいろ設定をする。
上の方にある再生・停止・一時停止ボタンなどで起動・停止。
とりあえずは停止させておこう。

ちなみに再生ボタンを押しても

予期しないエラー0x8ffe2740が発生しました

と言われて IIS が起動しない場合がある。
これは IIS がデフォルトの待ち受けポートである80番を bind しようとして失敗した場合のエラー。
apache など別の web server が起動していないか確認しよう。
しかし、

これくらい予期してくれ。。。

と言いたいのは私だけではないはずだ。:-<

PHP のインストール

http://www.php.net/downloads.php の “Windows Binaries” から “PHP 4.3.4 zip package” を選んで php-4.3.4-Win32.zip をダウンロード。
解凍して出来たフォルダを C:\php-4.3.4 とでもする。
続けて http://www.geocities.jp/rui_hirokawa/php/win/ から廣川さんに感謝しつつ php-4.3.4-Win32-mb-1.1.lzh をダウンロード。
解凍したフォルダの中身をすべて選択して、C:\php-4.3.4\ 以下に上書きで移動する。

さて、C:\php-4.3.4\ のフォルダの中身を以下の様に移動(またはコピー)。

  • C:\php-4.3.4\php4ts.dll を C:\WINDOWS\system32\ へ
  • C:\php-4.3.4\dlls\* を C:\WINDOWS\system32\ へ
  • C:\php-4.3.4\php.ini-recomended を C:\WINDOWS\php.ini へ
  • C:\php-4.3.4\sapi\php4isapi.dll を C:\WINDOWS\system32\inetserv\ へ

[コントロールパネル]→[パフォーマンスとメンテナンス]→[管理ツール]→[インターネット インフォメーション サービス]の「既存の web」のプロパティで以下のように設定。

  • ISAPIフィルタタブで[追加]→フィルタ名「PHP」・
    実行ファイル「C:\WINDOWS\system32\inetserv\php4isapi.dll」
  • ホームディレクトリタブで[構成]→[追加]→実行ファイル
    「C:\WINDOWS\system32\inetserv\php4isapi.dll」・拡張子「.php」・
    「ファイルの存在を確認しない」

続けて移動した先の php.ini の編集。主なものは以下の感じ。

extension_dir = "C:/php-4.3.4/extensions/"
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = Off
mbstring.detect_order = auto
mbstring.substitute_character = auto
mbstring.script_encoding = SJIS

IIS はどっぷり windows 文化なので、

php.ini を編集したらマシンを再起動

する必要あり。めんどくさい。。。

IIS の起動テスト

無事に再起動が通ったら「既定のWebサイト」の下で .php なファイルに phpinfo() とでも書いて試してみよう。

<?php
  phpinfo();
?>

外部動的ライブラリ

PHP エンジン本体にスタティックリンクしていないライブラリも、php.ini に指定して動的に読み込むことができる。
例としてバイナリパッケージに梱包されている PostgreSQL モジュールと、サードパーティ製の PDFlib を入れてみる。

PostgreSQL用のライブラリは C:\php-4.3.4\extensions\php_pgsql.dll。
先の php.ini の編集で extension_dir を設定しているので、php.ini に “extension=php_pgsql.dll” という記述を足すだけでよい。
すでにコメントアウトされているものがあるので、行頭のセミコロンをはずすだけ。

PDFlib は http://pdflib.jp/products/pdflib/download/ から PDFlib-5.0.2p1-Windows.zip をダウンロード。
解凍して、できたフォルダの中の bind\php\php421\libpdf_php.dll を C:\php-4.3.4\extensions\ へ移動する。
php.ini の他の extension= があるあたりに “extension=libpdf_php.dll” を記述。

以上ができたら、apache の場合は apache の再起動、IIS の場合はマシンを再起動する。
再起動が済んだら phpinfo(); と書いたスクリプトを表示させてライブラリが読み込まれているか確認しよう。