Forum und email

Microsoft IIS / PWS

この章では、IIS (Microsoft Internet Information Server) に関する 注意やヒントを取り上げます。

警告

CGI としてセットアップすると、サーバは様々な攻撃を受ける可能性があります。 これらの攻撃からサーバを守る方法については、 CGI セキュリティ のセクションを参照してください。

IIS あるいは PWS で PHP を使用する際に、一般的に考慮すべき点

  • まず最初に、 マニュアルインストール をお読みください。 ここには Windows 上に PHP をインストールするための重要な情報が含まれているので、 決して読み飛ばしてはいけません。
  • CGI を利用する場合は、php.ini 内で cgi.force_redirect PHP ディレクティブを 0 に設定する必要があります。 cgi.force_redirect に関する FAQ に重要な情報がありますので お読みください。また、CGI を利用する場合は cgi.redirect_status_env ディレクティブを設定することもあるかもしれません。これらの ディレクティブを使用する際には、php.ini 内でその項目が コメントアウトされていないことを確認してください。
  • PHP 4 では CGI は php.exe という名前ですが、 PHP 5 ではその名前は php-cgi.exe となります。 PHP 5 では php.exe は CLI であり、CGI ではありません。
  • Windows の環境変数 PATH を変更し、PHP の ディレクトリを含めるようにしてください。こうすることによって PHP の DLL ファイルや PHP 実行ファイルを PHP ディレクトリの中に置いておくことが可能となり、Windows のシステムディレクトリを汚すことが避けられます。 詳細な情報は、FAQ の PATH を設定する方法 を参照ください。
  • IIS ユーザ (通常は IUSR_MACHINENAME) に対しては、 php.ini、ドキュメントルートおよびセッションの一時ディレクトリなどの さまざまなファイルやディレクトリへの読み込み権限を与えておくことが 必要です。
  • php.ini 内のディレクティブ extension_dir および doc_root は、必ず適切に設定するようにしましょう。 これらのディレクティブの内容は、PHP がインストールされている システムに依存します。PHP 4 では extension_dir は extensions となりますが、PHP 5 では ext です。そのため PHP 5 の extensions_dir の値は例えば "c:\php\ext" のようになり、 IIS の doc_root の値は例えば "c:\Inetpub\wwwroot" のようになります。
  • php_mysql.dllphp_curl.dll のような PHP 拡張モジュールの DLL ファイルは、zip パッケージ版の PHP 配布物に含まれています (インストーラ版には含まれません)。 PHP 5 では多くの拡張モジュールが PECL に含まれるようになり、 "Collection of PECL modules" パッケージとしてダウンロード できるようになりました。この中には php_zip.dllphp_ssh2.dll などが含まれます。 » PHP はここからダウンロードできます
  • 実行ファイルを定義する際に「ファイルの存在を確認する」をチェックします。 少しパフォーマンス は落ちますが、IIS (もしくは PWS) が PHP を起動する前に、 そのスクリプトが存在し認証上の問題がないかをチェックするようになります。 PHP は CGI エラー時に空白の画面しか出力しませんが、こうすることで、 より解りやすい 404 エラーメッセージを出力させるようにすることができます。
  • 配布されている PHP の実行ファイルは 32bit アプリケーションです。 64bit 版の Windows を使用している場合は、自分でバイナリを再ビルドするか、 あるいは 32bit の拡張モジュールを実行できるように IIS を設定します。 この設定は、通常は IIS の管理スクリプトで Cscript.exe adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1 のようにします。

Windows NT/200x/XP 上の IIS 4 以降

PHP は、CGI バイナリあるいは ISAPI モジュールのいずれかの形式で インストールされていることでしょう。いずれにしても、まず 「マイクロソフトマネージメントコンソール」 (Windows NT 4.0 オプションパック環境では「インターネット サービスマネージャ」、Windows 2000/XP では コントロールパネル=>管理ツールにあります) を起動する必要があります。 次に、Web サーバノード (たいていは「既定の Web サイト」と表示されています) 上で右クリックし、「プロパティ」を選択します。

CGI バイナリを使う場合は、次のようにしてください。

  • 「ホームディレクトリ」あるいは「仮想ディレクトリ」「ディレクトリ」タブで 以下のようにします。
  • 実行アクセス許可を「スクリプトのみ」に変更します。
  • 「構成」ボタンをクリックし、「マッピング」タブを選択します。 「追加」をクリックし、実行可能ファイルに適切な CGI ファイルを指定します。 たとえば PHP 5 では C:\php\php-cgi.exe となります。 「拡張子」に .php を指定し、「動詞」は空白のまま、 「スクリプトエンジン」チェックボックスをチェックしてください。 そして、「OK」ボタンを何度かクリックしてください。
  • 適切なセキュリティを設定してください (これは インターネットサービスマネージャで行います)。もし NT サーバで NTFS ファイルシステムを使用しているなら、 php.exe / php-cgi.exe があるディレクトリへの実行権限を I_USR_ に追加してください。

ISAPI モジュールを使う場合、次のようにしてください。

  • PHP を使用した HTTP 認証を実行しない場合は、この手順を飛ばしてください。 「ISAPI フィルタ」タブで新規フィルタを追加します。「フィルタ名」として PHP を使用し、「実行ファイル」には php4isapi.dll / php5isapi.dll へのパスを入力してください。
  • 「ホームディレクトリ」あるいは「仮想ディレクトリ」「ディレクトリ」タブで 以下のようにします。
  • 実行アクセス許可を「スクリプトのみ」に変更します。
  • 「構成」ボタンをクリックし、「マッピング」タブを選択します。 「追加」をクリックし、実行可能ファイルに適切な ISAPI DLL を指定します。 たとえば PHP 5 では C:\php\php5isapi.dll となります。 「拡張子」に .php を指定し、「動詞」は空白のまま、 「スクリプトエンジン」チェックボックスをチェックしてください。 そして、「OK」ボタンを何度かクリックしてください。
  • IIS を停止させます (NET STOP iisadmin)。
  • IIS を再度起動します (NET START w3svc)。

IIS 6 (2003 Server) の場合は IIS マネージャを開き、「Web サービス拡張」に 移動し、「新しい Web サービス拡張を追加」を選択し、たとえば「PHP」などと 拡張名を入力し、「追加」ボタンを押して ISAPI ファイル (php4isapi.dll または php5isapi.dll) あるいは CGI (php.exe または php-cgi.exe) を選択し、「拡張の状態を許可済みに設定する」をチェックして「OK」ボタンを クリックします。

デフォルトのページとして index.php を使用するには 以下のようにします。 (訳注:「既定の Web サイト」のプロパティダイアログで) 「ドキュメント」タブを選択し、「追加」を選択します。そこで index.php と入力し、「OK」をクリックします。 「上に移動」や「下に移動」を使用して順番を調整します。 これは Apache での DirectoryIndex の設定と同じです。

上記の手順を PHP スクリプトに関連づけたい拡張子ごとに繰り返してください。 一般的な拡張子は .php ですが、 古いアプリケーションでは .php3 が必要な場合があります。

CPU 使用率が 100% となる場合は、IIS の設定「ISAPI アプリケーションをキャッシュ」をオフにしてください。

Windows 上の PWS 4

PWS 4 は ISAPI をサポートしていません。PHP CGI のみが使用可能です。

  • 配布ファイル内の pws-php4cgi.reg / pws-php5cgi.reg ファイル (PHP 4 の場合は SAPI フォルダ、 PHP 5 の場合メインフォルダを参照)を編集し、php.exe / php-cgi.exe の設置場所を反映させます。 バックスラッシュはエスケープする必要があります。例、 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map] ".php"="C:\\php\\php.exe" (PHP 5 の場合は C:\\php\\php-cgi.exe とします)。 編集を終えたらダブルクリックして、レジストリファイルをシステムに反映させます。
  • PWS マネージャで、PHP を実行させたいフォルダで右クリックし、 プロパティを選択します。「実行」チェックボックスをチェックし、確認を押します。

Windows 上の PWS/IIS 3

PWS/IIS 3 サーバを設定するには、配布ファイルに含まれる REG ファイル (SAPI フォルダの pws-php4cgi.reg が PHP 4 用、 メインフォルダの pws-php5cgi.reg が PHP 5 用) を使用することを推奨します。 このファイルを編集し、拡張子および PHP インストールディレクトリを自分用の設定に 調整することが可能です。さもなくば、以下の手順により、手動でこの設定を行うことも可能です。

警告

以下の手順では Windows レジストリに対して直接変更を加えます。 ひとつでも間違えると、システムが不安定になる可能性があります。 レジストリのバックアップをとることをを強く推奨します。 PHP 開発チームは、レジストリが損傷した場合の責任を負いません。

  • Regedit を起動します。
  • HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /W3Svc /Parameters /ScriptMap へ移動します。
  • 「編集」メニューから、新規 -> 文字列値 を選択します。
  • PHP スクリプトに使用したい拡張子を入力します。 たとえば .php となります。
  • この新しく作成した文字列値をダブルクリックし、入力欄に php.exe までのパスを入力します。たとえば PHP 4 では C:\php\php.exe "%s" %s、 PHP 5 では C:\php\php-cgi.exe "%s" %s となります。
  • PHP スクリプトに関連付けたいすべての拡張子に対して、 上記の手順を繰り返します。

以下の手順は、Web サーバのインストールに影響を与えるものではなく、 PHP スクリプトをコマンドライン (例:「ファイル名を指定して実行」で C:\myscripts\test.php を入力するなど) やダブルクリックで実行させたい場合にのみ行ってください。 ダブルクリックした際にテキストエディタに読み込まれるままとしたいのなら、 以下の手順はスキップしてください。

  • HKEY_CLASSES_ROOT へ移動します。
  • 編集メニューから、新規 -> キー を選択します。
  • キーを先に入力した拡張子と同じ名前にします。例、.php
  • 作成した新しいキーを選択した状態にし、右の欄で 「(既定)」 をダブルクリックして phpfile と入力します。
  • 先に登録したすべての拡張子に対して繰り返します。
  • HKEY_CLASSES_ROOT で、再度 新規->キー とし、phpfile という名前にします。
  • 新しいキー phpfile を選択した状態にし、 右の欄で 「(既定)」 をダブルクリックして PHP Script と入力します。
  • phpfile を右クリックし、新規->キー を選択し、新しくできたキーを Shell という名前にします。
  • Shell を右クリックし、新規->キー を選択し、新しくできたキーを open という名前にします。
  • open を右クリックし、新規->キー を選択し、新しくできたキーを command という名前にします。
  • 新しくできた command を選択した状態にし、 右の欄で 「(既定)」 をダブルクリックして php.exe への パスを入力します。例、c:\php\php.exe -q %1%1 を忘れずに入力すること)。
  • Regedit を終了します。
  • Windows 上で PWS を使用している場合、レジストリを再ロードするために 再起動します。

ここまでの作業で、PWSおよび IIS 3用のシステムインストールは完了しました。 IIS 3 用の良くできた » 設定ツール が Steven Genusa により 配布されており、これを使用してスクリプトマッピングを設定することができます。