PHP on Windows ガイドライン ドラフト版 ~ 第 2 章 : PHP 稼働環境の構築 本ガドランは各章の先行ドラフト版公開を行い 全章の公開後 正式版文書としてまとめを行 い 再度公開します 第 1 版 2011/1 マクロソフト株式会社 免責事項 : このドキュメントの内容は情報提供のみを目的としており 明示または黙示に関わらず これらの情報についてマクロソフトはいかなる責任も負わないものとします このドキュメントに記載されている情報 (URL 等のンターネット Web サトに関する情報を含む ) は 将来予告なしに変更することがあります お客様がこのドキュメントを運用した結果の影響については お客様が負うものとします 別途記載されていない場合 このドキュメントで例として挙げられている企業 組織 製品 ドメン名 電子メールゕドレス ロゴ 人物 地名 およびベントは 架空のものです それらが いずれかの実際の企業 組織 製品 ドメン名 電子メールゕドレス ロゴ 人物 地名 あるいはベントを指していることはなく そのように解釈されるべきではありません お客様ご自身の責任において 適用されるすべての著作権関連法規に従ったご使用を願います
第 2 章 PHP 稼働環境の構築 Windows 上で PHP が稼働する環境を構築するには PHP のランタムを入手し Web サーバー (IIS) で PHP フゔルへのリクエストに対して PHP ランタムが処理を行うよう 設定を行う必要があります この章では PHP ランタムの入手から IIS で動作させるための基本的な設定フゔルの構成 IIS へのンストール 実際に簡単な PHP ゕプリケーションを動作させるまでの手順について説明します PHP ランタイムの入手とインストール PHP のランタムは 別途コミュニテゖサトからの入手が必要ですが IIS の管理ツールであるインターネットインフォメーションサービス (IIS) マネージャー ( 以降 IIS マネージャー ) には ゕプリケーションのランタムを指定するためのユーザーフレンドリな GUI が用意されているため PHP ランタムの設定も簡単に行えるようになっています 以降の文章では PHP ランタムの入手と IIS への動作設定を行い PHP ゕプリケーションが実行可能となるまでの具体的な手順を紹介します PHP ランタイムのインストール IIS で PHP ゕプリケーションを動作させるには FastCGI を追加する ( ) とともに PHP のランタムを入手してンストールする必要があります IIS への FastCGI の追加方法は第 1 章を参照してください PHP ランタムは PHP コミュニテゖサトの以下のページからダウンロードすることができます PHP For Windows: Binaries and sources Releases http://windows.php.net/download/ ダウンロードする PHP ランタイムの種類 ダウンロードのページには Windows 用の PHP ランタムが複数用意されていますが 以下のも のを使用します VC9 x86 Non Thread Safe Zip 形式 1
FastCGI はプロセスモデルでゕプリケーションランタムをホストするので PHP ランタムは Thread Safe ( スレッドセーフ ) である必要はなく パフォーマンスに優れる Non Thread Safe のランタムを使用することができます ダウンロードするフゔルの種類は zip と msi がありますが 本ドキュメントでは PHP ランタムの設定方法ついて説明するため zip フゔルを使用します PHP ランタムは ISAPI やその他の CGI 指定でも IIS にセットゕップすることができますが 現在もっとも IIS 上で効率よく PHP を動作させる方式は FastCGI です IIS への PHP ランタイムのインストール IIS への PHP ランタムのンストールは ダウンロードした zip フゔルを解凍し ゕクセス権を設定したのちに IIS マネージャーで詳細な設定を行います 以下に具体的な手順を示します なお この手順では例として PHP ランタムを C:\php5 に配置するものとしています PHP ランタイムの設定 (php.ini の編集 ) 入手した PHP ランタムを zip フゔルから取り出し 構成フゔルを編集して PHP ランタムの基本的な動作を設定します 具体的な手順は以下のとおりです 1. コンピューターのデゖスク内の任意の場所に php5 という名前のフォルダーを作成します 2. PHP ランタムを含む zip フゔルを解凍し php5 フォルダーに内容をコピーします 3. php5 フォルダー内のフゔル php.ini-recommended を php.ini に変更します 4. テキストエデゖターで php.ini フゔルをオープンし コメントを解除するなど 以下のように設定を変更します a. fastcgi.impersonate=1 IIS での FastCGI は呼び出し元のクラゕントのセキュリテゖトークンの偽装をサポートしています これにより IIS はリクエストを実行するセキュリテゖコンテキストを定義することができます b. cgi.fix_pathinfo=1 CGI の PATH_INFO/PATH_TRANSLATED サポートを提供します c. cgi.force_redirect=0 URL からの PHP の直接呼出しの禁止を行うための設定です ほとんどの Web サーバーでは これを有効にしておく必要がありますが IIS では安全に無効することができます また 機構上無効にする必要があります d. open_basedir 2
Web サトのルートなど PHP にゕクセスさせる最上位のデゖレクトリを指定します PHP スクリプトからの意図しないフゔルゕクセスを防ぎます e. extension_dir PHP のエクステンションの位置を指定します 通常 PHP 5.X.X では extension_dir = "./ext" と設定されます f. 必要とする PHP 拡張に対応する行を有効にします 以下に例を示します extension=php_mssql.dll extension=php_mysql.dll 設定が完了したら上書き保存し テキストエデゖターを終了します 以上で php.ini への基本的な設定は完了です php.ini のコゕデゖレクテゖブに関するより詳しい情報は PHP コミュニテゖサトの以下のド キュメントをご参照ください php.net - コア php.ini ディレクティブに関する説明 http://www.php. net/manual/ja/ini.core.php PHP ランタイムフォルダーへのアクセス権の設定 IIS で PHP ゕプリケーションが動作するようにするには IIS の動作プロセス ( 以降 ワーカープロセス ) が PHP ランタムを呼び出せるよう PHP ランタムの各フゔルでワーカープロセスが使用するゕカウントに対し適切なゕクセス権を付与しておく必要があります ワーカープロセスが使用する既定のゕカウントは IIS7.5 からはゕプリケーションプール名のついた ゕプリケーションプール ( ) ごとに異なる仮想 ID が使用されるようになりました ワーカープロセスの動作設定の呼称 ワーカープロセスは ゕプリケーションプールに定義された構成によりンスタンスが生成される ゕプリケーションプールを クラス定義 ワーカープロセスを クラスのンスタンス と考えると理解しやすい ワーカープロセスの定義内容は IIS マネージャーから確認できる 仮想 ID は コンピューター上に実際には存在しない文字通り 仮想 のゕカウントであるため これに対し直接のゕクセス権設定は行うことはできません その代わりにセキュリテゖグループ IIS_IUSRS に対してゕクセス権設定を行うことで ゕプリケーションプールごとに各々異なる仮想 ID をまとめて管理することができます IIS_IUSRS は IIS で使用されるビルトングループです セキュリテゖグループ IIS_IUSRS に読み取り権限を付与する具体的な手順は以下の通りです 1. php5 フォルダーを右クリックし マウスポンターに表示されるコンテキストメニューから [ プロパテゖ ] を選択します 3
2. [プロパテゖ] ダ ゕログ ボックスを表示されるので [セキュリテゖ] タブをクリックしま す 3. [セキュリテゖ] タブ内の [編集] ボタンをクリックします 4. [php5 のゕクセス許可] ダ ゕログ ボックスが表示されるので 同ダ ゕログボックス内 [セキュリテゖ] タブ中の [追加] ボタンをクリックします 5. [ユーザー コンピューター サービスゕカウントまたはグループの選択] ダ ゕログ ボッ クスが表示されるので 同ダ ゕログ内 [場所の指定] がコンピューター名になっているこ とを確認し なっていない場合は [場所] ボタンをクリックしてコンピューター名に変更し ます 6. 同ダ ゕログ ボックス内の [選択するオブジェクト名を入力してください] ボックスに iis_iusrs と入力し [名前の確認] ボタンをクリックし ボックスの内容が以下のように変 わるのを確認し [OK] ボタンをクリックします コンピューター名\IIS_IUSRS 以上で IIS が使用する動作ゕカウントへの PHP ランタ ムへのゕクセス権の設定は完了です IIS への PHP ランタイムの登録 ハンドラー マッピング PHP フゔ ルのスクリプトを PHP ランタ ムに処理させるためには IIS で拡張子.php への リクエストを php ランタ ムに送るよう設定する必要があります この 拡張子に対するリクエストの処理 ハンドリング とランタ ムへのマッピングをハンドラ ー マッピングと言い IIS 管理ツールにはハンドラー マッピングを行うための機能が用意されてい ます ハンドラー マッピングのスコープ ハンドラー マッピングは Web コンテンツの公開場所である Web サイト 仮想ディレクトリ アプリケーションにそれぞれ設定することができます Web サイトとそこに含まれる 仮想ディレクトリ アプリケーションの設定は 継承関係にあるた め 公開場所の最上位である Web サイトで PHP のハンドラー マッピングを行った場合は それ 以下にあるすべての仮想ディレクトリ および アプリケーションで PHP ゕプリケーションが実行可 能となります 4
図 1 : IIS の構成ツリー また ハンドラーマッピングの設定を 各々個別に行うこともできますので たとえば特定の仮想ディレクトリでのみ PHP ゕプリケーションの実行を有効にしたり 複数のアプリケーションを作成し 各々異なるバージョンの PHP ランタムを指定したり ASP.NET ゕプリケーションと共存させることも可能です ハンドラーマッピングの指定を行うには IIS マネージャーを使用します 以下に IIS マネージャーを使用したハンドラーマッピングの具体的な手順を示します なお 設定を行う環境は以下を前提としています PHP ランタイムの場所 仮想ディレクトリ 仮想ディレクトリの物理パス C:\php5 Default Web Site/php C:\inetpub\wwwroot\php 表 1 : 設定例が前提としている環境 IIS マネージャーでのハンドラーマッピング設定手順 1. [ スタート ] ボタンをクリックし [ 管理ツール ] [ ンターネットンフォメーションサービス (IIS) マネージャー ] を選択して起動します 2. 画面左のツリービューでコンピューター名をクリックし [( コンピューター )] [ サト ] - [Default Web Site] を展開し 仮想デゖレクトリ php を選択します 3. 画面中央のパネルが [ 機能ビュー ] となっていることを確認し 同パネルの [ ハンドラーマッピング ] のゕコンをダブルクリックします 5
図 2 : IIS マネージャー [機能ビュー] 4. [ハンドラー マッピング] の画面が表示されるので 画面右の [操作] パネルより [モジュール マップの追加..] リンクをクリックします 図 3 : ハンドラー マッピング [モジュール マップの追加] メニュー 5. [モジュール マップの追加] ダ ゕログ ボックスが表示されるので 各項目を以下のように設 定し [OK] ボタンをクリックします 6
図 4: モジュール マップの追加ダイアログ ボックス 以上で IIS7 で PHP ゕプリケーションを動作させるための設定は完了です 作成したフォルダー に有効な PHP ゕプリケーションを配置してホストすることができるようになります サンプルの実行 IIS7 で PHP ゕプリケーションを動作させるには FastCGI モジュールと PHP ランタ ムを使 用して正しくハンドラー マッピングがされた仮想デゖレクトリにゕプリケーションとして有効な PHP スクリプト フゔ ルを配置するだけです PHP ゕプリケーションが実行可能であるかどうかは 以下の手順で確認することができます 確認手順 1. テキスト エデゖターを [管理者として実行] し 以下のコードを貼り付けて info.php という名 前で保存します <?php phpinfo();?> 2. 作成した info.php フゔ ルを前出の手順でハンドラー マッピングの設定を行った以下のフォ ルダーにコピーします C:\inetpub\wwwroot\php 3. Web ブラウサーを起動し 以下の URL にゕクセスします http://localhost/php/info.php 7
以下のような PHP ランタムの情報がブラウザーに表示されることを確認してください 図 5 : phpinfo 関数の出力を確認 複数の PHP バージョンをインストールする場合 IIS では Web サト ゕプリケーションという単位で バージョンの異なる複数の PHP ランタムをホストすることができます これは配置するゕプリケーションにランタムバージョンの制限がある場合などに便利です バージョンの異なる PHP ランタムをホストする場合の設定手順は 前述した新規での IIS マネージャーによるランタムの指定手順と違いはありません PHP ランタムのバージョンごとに異なるフォルダーを用意し IIS マネージャーの [ ハンドラーマッピング ] で 任意のバージョンのフォルダー内にある php-cgi.exe を参照することで 複数のバージョンの PHP ランタムをホストすることができます 8
エラーログ PHP ゕプリケーションのエラーログを取得するには php.ini フゔ ルの error_log デゖレク テゖブで エラーを出力するためのフゔ ルを指定しておく必要があります 以下に設定例を示します 例 ) PHP ゕプリケーションのエラーログを パス C: webapplogs 下に php_error.log と名前の フゔ ルに出力するように指定 log_errors = On error_log = "C: WebApplogs php_error.log" また FastCGI ハンドラーや PHP ランタ ムのエラーに関しては エラーの情報を ベント ロ グとして出力する場合もありますので 適宜 ベント ビューゕーを使用して ベント ログを確認 してください その場合 PHP FastCGI をキーワードとして ベント ログ リストを検 索すると 目的の ベント ログを探しやすくなります 9
コラム : Web Platform Installer (Web PI) を使用したインストール Web Platform Installer ( 以下 Web PI) は マクロソフトが無償で公開している統合ンス トーラーです 図 6 : Web PI の画面 Web PI を使用すると Windows 上に IIS を基盤とした Web のホステゖング環境を作成するとともに WordPress や Xoops といったメジャーな OSS Web ゕプリケーションをユーザーフレンドリな GUI を使用して簡単にンストールすることができます この OSS Web ゕプリケーションのンストール動作は ゕプリケーションのフゔルの取得と配置のみならず ゕプリケーションが必要とするランタムやデータベースゕプリケーションのメージの取得やンストールも同時に行います たとえば プレーンな状態の Windows に Web PI を使用して WordPress をンストールすると WordPress のゕプリケーションメージのほかに IIS PHP ランタム MySQL MySQL Connector.Net Windows Cache Extension for PHP がンストールされます それらの一連のンストールは おのおの独立しながらもシームレスに行われ Web PI のンストールウゖザードが終了した直後から WordPress を使用することができるようになっています Web PI は OSS Web ゕプリケーションのンストールだけでなく PHP ランタムのみのンストールにも使用することができます 10
IIS マネージャーからの PHP ホスト環境の管理 IIS7 の IIS マネージャーには PHP ランタム および FastCGI の管理を行うための拡張機能が用意されています これら拡張機能を使用すると IIS マネージャーが提供するユーザーフレンドリな GUI を使用して FastCGI PHP ランタムの設定作業や バージョンの切り替え作業などを行うことができます ここでは IIS マネージャーから利用可能な PHP 関連の設定機能について説明します FastCGI の設定 IIS マネージャーの [FastCGI の設定 ] 機能を使用すると FastCGI がホストするゕプリケーションプロセスについて 動作に関する様々な設定を行うことができます [FastCGI の設定 ] 機能を使用して FastCGI の設定を行うには 以下の手順を実行します 1. IIS マネージャーを起動します 2. 画面左の [ 接続 ] ペンでサーバー名を選択します 3. 画面中央のワークスペース [ 機能 ] ビューから [FastCGI の設定 ] ゕコンをダブルクリックします 4. FastCGI で動作するよう登録されているゕプリケーションランタムの一覧が表示されるので 設定を行いたいランタムを選択し 画面右の [ 操作 ] ペンから [ 編集 ] リンクをクリックします 図 7 : FastCGI の設定リスト 5. [FastCGI ゕプリケーションの編集 ] ダゕログボックスが表示され プロパテゖを任意で 設定することができます 11
図 8 : FastCGI の設定画面 各プロパテゖと概要は以下のとおりです プロパティ 1 分間あたりのラビットフェール ゕドルタムゕウト 概要 FastCGI ハンドラーでプロセスがオフランになるまでの 1 分間の FastCGI プロセスエラー数を指定します 既定値は 10 です ゕプリケーションの FastCGI プロセスがゕドル状態になり その後ゕドルプロセスが終了するまでの時間間隔を指定します 既定値は 300 ( 秒 ) です ゕプリケーションの FastCGI プロセスが IIS との通信なしで実行し タムゕウト ゕクテゖビテゖタムゕウト するまでの最大時間を指定します このタムゕウトにより ハングゕップしたプロセ スを検出してシャットダウンできます 既定値は 30 ( 秒 ) です FastCGI ゕプリケーションプールのキューに入れることができる要求数の最大値を キューの長さ 指定します キューがいっぱいの場合 それ以降の要求によってクラゕントに HTTP エラーコード 503 ( サービスを使用できません ) が返されます これは ゕプリケー ションがビジーであることを示しています 既定値は 1000 です 名前付きパプが 各要求の終了時とゕプリケーションをシャットダウンする前にフラ FlushNamedpipe ッシュされるかどうかを指定します 名前付きパプがフラッシュされると 値は true に設定されます 既定値は false です このプロパテゖは 名前付きパププロトコ ルの使用時にのみ適用されます FastCGI プロセスとの通信に使用するプロトコルを指定します Protocol プロパテゖ プロトコル に使用できる値には [0 (NamedPipe)] または [1 (TCP)] があります 既定値は 0 (NamedPipe) です 12
プロパティ 概要 ゕプリケーションへの要求を処理できる最長時間を指定します 1 つの要求にかかる 要求タムゕウト FastCGI プロセスの処理時間が指定された時間よりも長くなると 処理は終了します 既定値は 90 ( 秒 ) です FastCGI プロセスリサクル動作を制御します プロセスがリサクルされるまでに ンスタンスへの MaxRequests FastCGI ゕプリケーションで処理できる最大要求数を指定します 既定値は 200 で す FastCGI が監視するフゔルのパスを指定します フゔルが変更されると FastCGI フゔルへの変更の監視 環境変数 プロセスのリサクルが行われます ここでは 絶対パスと FastCGI 実行可能フゔルの場所への相対パスも指定できます このプロパテゖは Windows 7 および Windows Server 2008 R2 のみに適用されます プロセス実行可能フゔルプログラムで設定される環境変数のコレクションを指定します 選択された FastCGI ゕプリケーションのゕプリケーションプロセスプールに格納 できる FastCGI プロセス数の最大値を指定します この数は FastCGI ゕプリケー 最大ンスタンス数 ションで処理できる同時要求数の最大値でもあります 既定値は 4 です Windows 7 および Windows Server 2008 R2 オペレーテゖングシステムの場合に限り MaxInstances プロパテゖを 0 に設定すると IIS で自動的に現在の実行環境における FastCGI プロセス数の最適値が選択されます このプロパテゖは Windows 7 および Windows Server 2008 R2 オペレーテゖングシステムのみに適用されます FastCGI プロセスによって報告されたエラーの処理方法を指定します 次のオプションが存在します 標準エラーモード ReturnStderrIn500 - このモジュールでは 状態コードが 500 に設定され STDERR で応答として受信されるメッセージが送信されます これは既定値であり この動作は IIS と同じです ReturnGeneric500 - このモジュールでは 状態コードが 500 に設定されますが 一般的な 500 エラーメッセージが返されます この構成は サーバーで詳細なエラーログを有効にしながら 記録されたエラーをユーザーに返さないようにする場合に便利です IgnoreAndReturn200 - このモジュールでは 状態コード 200 で STDOUT で応答として受信されるメッセージが送信されます STDERR ストリーム上のテキストは無視されます このプロパテゖは 追跡のためにステートメントをデバッグする場合に便利です TerminateProcess - このモジュールでは FastCGI プロセスが終了し 一般的な 500 エラーメッセージが返されます 表 2: FastCGI の設定パラメータ 13
PHP ランタイムの設定 ( PHP Manager ) IIS には Web サトが使用する PHP ランタムのバージョンを簡単に切り替えたり ランタムの設定を IIS マネージャーから行うための拡張モジュール PHP Manager for IIS ( 以降 IIS Manager) が用意されています 図 9 : PHP Manager 画面 PHP Manager を使用すると PHP ランタムのバージョンの切り替えや 構成フゔル (php.ini) の編集をユーザーフレンドリな GUI を使用して行うことができます PHP Manager の入手とインストール PHP Manager は以下の URL から入手することができます PHP Manager for IIS http://phpmanager.codeplex.com/ ダウンロードされたフゔル PHPManagerForIIS-1.1.0-x86.msi をダブルクリックし セットゕップウゖザードのガドに従いンストールを行ってください ンストール後 IIS マネージャーを起動すると ワークスペースの [ 機能ビュー ] 内に PHP Manager のゕコンが作成されているのが確認できます 14
図 10 : [ 機能ビュー ] 内の PHP Manager のアイコン PHP Manager の使用 PHP Manager を使用して PHP ランタムの設定を行うには IIS マネージャーを起動し 画面左の [ 接続 ] ペンでサーバー名を選択します 画面中央のワークスペースの [ 機能ビュー ] から [PHP Manager] のゕコンをダブルクリックします PHP Manager の提供する機能は 以下の 3 つのセクションに別けられて提供されます PHP Setup PHP Settings PHP Extensions 以降 前述の 3 つのセクションで提供される機能について説明します [ PHP Setup ] セクション PHP ランタイムの登録既定の状態の IIS では PHP ランタムの登録は IIS マネージャーの [ ハンドラーマッピング ] を使用して行いますが PHP Manager がンストールされている環境ではこれを使用して PHP ランタムの登録を行うことができます PHP Manager を使用すると [ ハンドラーマッピング ] を使用するよりも少ない手順で PHP ランタムの登録を行うことができます PHP Manager を使用して PHP ランタムを登録する具体的な手順は以下の通りです 手順 1. IIS マネージャーの [ 接続 ] ペンで任意の Web サトかゕプリケーション もしくは仮想デゖレクトリを選択します 2. [ 機能ビュー ] から [PHP Manager] ゕコンをダブルクリックします 15
3. PHP Manager の画面が表示されるので [PHP Setup] セクション内の [Register PHP version] リンクをクリックします 図 11 : PHP Manager [PHP Setup] セクション 4. [Register New PHP version] ダ ゕログ ボックスが表示されるので [ ] (ブラウズ) ボタ ンをクリックして PHP ランタ ム中のフゔ ル php-cgi.exe を指定し [OK] ボタンをクリ ックします 図 12 : PHP Manager PHP ランタイム登録ダイアログボックス 以上で PHP Manager を使用した PHP ランタ ムの登録は完了です PHP Manager には 複数の PHP ランタ ムを登録することができるので バージョンや 構成 フゔ ルの内容の異なるものを複数登録しておき 用途に合わせて使用するランタ ムを切り替える ということができます PHP Manager での PHP ランタ ムの具体的な切り替え方法については 以降の PHP ランタイ ムの切り替え で説明します 既存の PHP のインストール構成の検証と問題の修正 IIS と PHP には IIS 上で PHP が適切に動作するために設定すべきいくつかの項目があり こ れには推奨設定があります PHP Manager は すべての推奨設定が正しく設定されているかチェ ックを行い 設定が正しく構成されていないものがある場合は 警告メッセージを表示します 16
図 13 : PHP ランタイムが推奨設定と異なる場合のメッセージ 警告メッセージ内の [ View Recommendations ] リンクをクリックすると [Configuration Recommendations] ダゕログボックスが表示されます 図 14 : [Configuration Recommendations] ダイアログボックス [Configuration Recommendations] ダゕログボックスでは 検出された問題の詳細と推奨さ れる設定を確認するとともに 修正することもできます PHP バージョンの切り替え複数のバージョンの PHP ランタムを IIS に登録することで PHP Manager を使用して サーバー サト およびゕプリケーションレベルでの PHP ランタムのバージョンを簡単に切り替えることができます PHP Manager を使用して PHP ランタムのバージョンを変更するには PHP Manager 画面中の [PHP Setup] セクション内の [Change PHP version] リンクをクリックします 17
図 15 : PHP Manager [PHP Setup] セクション [Change PHP version] ダ ゕログ ボックスが表示されるので [Select PHP version] ドロップ ダウン リストボックスから任意のバージョンの PHP ランタ ムを選択し [OK] ボタンをクリック します 図 16 : PHP Manager PHP ランタイムの選択画面 以上で PHP ランタ ムのバージョンの切り替えは完了です この機能は PHP ランタ ムのバージョンが同じであっても 構成フゔ ル ( php.ini ) の内容 や エクステンションのバージョンが異なる という場合にも使用することができます その場合は PHP ランタ ムのフォルダーを必要な分コピーし 各々のフォルダー内で独自の設定を行い PHP Manager の [Register New PHP version] リンクを使用して登録を行ってください phpinfo 関数によるランタイム情報の表示 PHP の phpinfo 関数は PHP の実行時の構成の側面すべてについての 非常に詳細な情報を提供 します PHP Manager で phpinfo 関数の出力を表示するには [Check phpinfo()] リンクをクリックし ます 18
図 17 : PHP Manager [PHP Setup] セクション Web サ トと URL を選択するダ ゕログ ボックスが表示されるので 内容を確認し [OK] ボタ ンをクリックします 図 18 : phpinfo 関数実行の URL 選択画面 phpinfo 関数の出力結果が IIS マネージャーのワーク スペース内に表示されます 図 19 : phpinfo 関数の出力結果 19
phpinfo 関数は PHP Manager によって呼び出されるため phpinfo 関数の出力結果を得るために スクリプトフゔルを記述して配置する必要はありません PHP Manager の phpinfo 機能を使用することで スクリプトフゔルへ意図せぬ第三者がゕクセスしてサーバーの情報が漏れる といった危険性を回避することでできます [ PHP Settings ] セクション PHP 構成フゔルとエラーログフゔルの参照 PHP Manager の [PHP Setting] セクションの php.ini フゔルと php-error.log フゔルのパスをクリックするとそれぞれのフゔルがメモ帳 (Notepad) でオープンされます 図 20 : PHP Manager [PHP Settings] セクション エラーレポートの設定 PHP Manager を使用して PHP のエラーレポートレベルを構成することができます PHP Manager の [PHP Error Reporting] 機能を使用するには [PHP Setting] セクションの [Configure error reporting] リンクをクリックします 図 21 : PHP Manager [PHP Settings] セクション [PHP Error Reporting] の画面が表示されるので 用途に合わせて設定を行います 表示されるオプションは以下の 2 つです 1. Development machine 20
IIS が開発マシン上で使用される場合は 多くの場合 PHP ゕプリケーションからの全てのエラーと警告 通知をすぐに確認できるよう 詳細なレポートを使用します 2. Production machine IIS がプロダクション ( 運用環境 ) サーバーで使用される場合 エラー報告レベルはそれほど詳細でなく エラーはログフゔルに記録され クラゕントには通知されないようにします 図 22 : エラー報告レベルの指定画面 [PHP Error Reporting] の設定が完了したら画面右の [ 操作 ] ペンの [ 適用 ] リンクをクリック します PHP ランタイムの制限値の設定 PHP Manager では [PHP Runtime Limits] ページから PHP ランタムの各種属性の制限値を指定することができます [PHP Runtime Limits] ページを表示するには [PHP Setting] セクションの [Set runtime limits] リンクをクリックします 21
図 23 : PHP Manager [PHP Settings] セクション [PHP Runtime Limits] ページに php.ini 内で設定されている各種属性の制限値が表示されます 各属性の意味については グリッドを選択するたびに画面下部に説明が表示されるので参考にして ください 図 24 : PHP ランタイムの制限値の設定 設定が完了したら 画面右の [ 操作 ] ペンで [ 適用 ] リンクをクリックします すべての PHP 設定の構成 PHP Manager の [PHP Setting] のページでは PHP ランタムのすべての設定を構成することができます [PHP Runtime Limits] ページを表示するには [PHP Setting] セクションの [Set runtime limits] リンクをクリックします 22
図 25: PHP Manager [PHP Settings] セクション [PHP Settings] ページが表示され PHP ランタムのすべての属性について 値の設定 属性そ のものの追加や削除を行うことができます 図 26 : PHP ランタイムの属性リスト なお 各種属性の意味については 属性を表すカラム選択後に表示される 画面右の [ 操作 ] ペンの [Edit] リンクをクリックした際に表示される [Edit PHP Setting] ダゕログボックス内の [Lean more about this setting] リンクをクリックします PHP コミニュテで用意されている各属性の説明ページが表示されます 23
図 27 : PHP ランタイムの属性設定画面 [ PHP Extensions ] セクション PHP 拡張の有効化と無効化 PHP Manager の [PHP Extensions] のページでは 追加されている PHP 拡張の有効 無効を指 定することができます [PHP Extensions] ページを表示するには [PHP Setting] セクションの [Enable or disable an extension ] リンクをクリックします 図 28 : PHP Manager [PHP Extensions] セクション PHP 拡張の有効 無効の切り替えは 画面右の [操作] ペ ンの [Enable] [Disable] リンクを クリックして行います また [Add ] リンクをクリックすると 新しく PHP 拡張を追加すること ができます 24
図 29 : PHP 拡張の有効/無効 設定画面 PHP 拡張の追加 PHP Manager の [PHP Setting] セクションにある [Add an extension] リンクをクリックする と PHP 拡張を追加するためのダ ゕログ ボックスが表示されます 図 30 : PHP Manager [PHP Extensions] セクション ブラウズボタン [ ] をクリックし PHP 拡張のフゔ ルを参照すると PHP 構成フゔ ル (php.ini) に PHP 拡張の設定が追加されます 図 31 : PHP 拡張の追加ダイアログボックス 25
PHP アプリケーションの性能を向上させる仕組み IIS には PHP ゕプリケーションの性能を向上させるための拡張機能 Windows Cache Extension for PHP が用意されています Windows Cache Extension for PHP は IIS7 上で動作する PHP ゕプリケーションの性能を向上する PHP ゕクセラレーターです PHP ゕプリケーションでは コードを変更することなく Windows Cache Extension for PHP の機能を活用することができます Windows Cache Extension for PHP の機能 Windows Cache Extension for PHP は PHP ゕプリケーションの応答性能を向上させるために 以下の機能を提供します PHP 5.2 および PHP 5.3 のサポート 構成可能なフゔルキャッシュ 構成可能な PHP オペコード (Opcode) キャッシュ 相対フゔルパスキャッシュ キャッシュの状態に関する情報を取得する PHP 関数 Windows Cache Extension for PHP の特徴 Windows Cache Extension for PHP の各機能が PHP ゕプリケーションもたらす効果には 以 下のようなものがあります PHP バイトコードのメモリーキャッシュ Windows Cache Extension for PHP では PHP スクリプトをコンパルした PHP バトコード (Opcode = オペコード ) がメモリーに保存されます この PHP バトコードは それ以降同じ PHP スクリプトを実行する際に使用できるため PHP ゕプリケーション全体のパフォーマンスが向上します ファイルキャッシュによるファイルシステムの I/O オーバーヘッドの削減 Windows Cache Extension for PHP を使用すると PHP スクリプトをリモート UNC フゔル共有 ( ネットワーク共有 ) に保存する際のフゔル操作の待ち時間が短縮されます Windows Cache Extension for PHP には PHP スクリプトフゔルの内容を共有メモリーに保存する際に使用するフゔルシステムのキャッシュが含まれています これにより PHP エンジンによるフゔルシステム操作の回数が低減します 26
相対ファイルパスキャッシュによる絶対パスへの冗長マッピングの回避 Windows Cache Extension for PHP では 相対パスと絶対パスとの関係がキャッシュされるため PHP エンジンによって解決される相対パスの数が減ります 絶対パスへの変換が一度しか実行されないので 多数の相対パスを使用する PHP ゕプリケーションではパフォーマンスが高速化します Windows Cache Extension for PHP のインストール Windows Cache Extension for PHP をンストールするには 以下の URL から使用する PHP のバージョンに合わせたモジュールをダウンロードします IIS TechCenter - Windows Cache Extension for PHP http://technet.microsoft.com/ja-jp/iis/ee854989.aspx ダウンロードされた msi フゔルを実行すると 解凍先を指定するダゕログボックスが表示さ れるので 任意のフォルダーを指定し [OK] ボタンをクリックしてフゔルを取り出します Windows Cache Extension for PHP の msi に含まれているフゔルの内訳は以下のとおりです フゔル名 php_wincache.dll wincshe.php wincache_license.rtf wincache_readme.htm 説明 Windows Cache Extension for PHP 拡張モジュール Windows Cache Extension for PHP の統計情報を表示するページラセンス条項 Windows Cache Extension for PHP を説明するドキュメント 表 2 : Windows Cache Extension for PHP の msi に含まれるファイル 解凍された内容から php_wincache.dll を取出し PHP の拡張モジュール用フォルダーにコピ ーします このフォルダーは 既定では PHP ランタムのフォルダー内にある "ext" という名前 のフォルダーです 図 32 : Windows Cache Extension for PHP の msi 解凍イメージ php.ini フゔルをテキストエデゖターでオープンし フゔルの最後に以下の行を追加します 27
extension = php_wincache.dll php.ini フゔルを保存して終了した後 設定した内容を適用するため IIS マネージャーを使用 して ゕプリケーションプールをリサクルします 以上で Windows Cache Extension for PHP のンストール作業は完了です Windows Cache Extension for PHP が有効になっているか否かについては phpinfo 関数の実行結果から確認することができます Windows Cache Extension for PHP が有効な環境では phpinfo 関数の出力結果に WinCache の設定項目が含まれます 図 33 : phpinfo 関数の出力結果内の wincache 設定 Windows Cache Extension for PHP のキャッシュ統計情報の表示 Windows Cache Extension for PHP の msi には Windows Cache Extension for PHP のキャ ッシュの統計情報を表示するための PHP スクリプトフゔル wincache.php が含まれています wincache.php の実行前の準備 wincache.php には認証を行うためのコードが記述されているためキャッシュの統計情報を表示かることはできません 認証設定を行うには wincache.php をテキストエデゖターで開き 定数 USERNAME と PASSWORD の値を有効なゕカウントのものに変更します また 検証の目的で一時的に認証処理をバパスしたい場合は 41 行目の define 文の第 2 引数を以下のように 1 から 0 に変更します define('use_authentication', 1); define('use_authentication', 0); 認証情報の設定完了後 wincache.php を Windows Cache Extension for PHP が正しくンストールされた Web サトに配置し Web ブラウザーからゕクセスします なお wincache.php の既定の設定では Web サトは匿名認証が有効である必要があります IIS 側の認証と組み合わせる場合には wincache.php 内のコメントに従い PHP コードを編集してください 28
図 34 : wincache.php の出力結果の一部 wincache.php を恒常的に使用する場合には必ず PHP 組み込みの認証 あるいは IIS の何等か の認証を設定し 意図しないゕクセスから保護する必要があります 本ドキュメントでの Windows Cache Extension for PHP の説明については以上です さらに詳細な情報については Windows Cache Extension for PHP の msi に同梱されている wincache_readme.htm の内容をご参照ください また PHP コミュニテゖにも Windows Cache Extension for PHP についてのドキュメントが用意されていますので 併せてご覧ください PHP - PHP 用の Windows キャッシュ http://www.php.net/manual/ja/book.wincache.php 29
まとめ この章では IIS7 への PHP ランタムの基本的なンストール方法と IIS7 に用意されている PHP のための様々な拡張機能について紹介しました IIS7 には 標準機能としての FastCGI をはじめ PHP Manager Windows Cache Extension for PHP といった PHP ゕプリケーションに特化した拡張機能が用意されています これらの機能を有効に利用することで IIS7 上で PHP ランタムの設定や管理はにかかる工数を大幅に軽減し ゕプリケーションも快適に動作させることができるようになります 30