Windowsに標準搭載されているWebサーバ。Windows Serverと一部のWindows Clientで利用出来る。
IISではHTTP/HTTPS以外にもSMTP機能を同梱しているのと、.NETアプリと親和性の高い点が特長。
以前、Code Red・Nimdaなどのウイルスから狙われ、大規模障害を起こした事がある。
0. 前提条件
[VM]: Hyper-V ver6.3.9600 [OS]: WindowsServer2012R2 64bit [MEM]: 4GB [HDD]: C:50GB / D:50GB [IIS]: IIS 8.5.9600
1. インストール作業
IISは「役割と機能の追加ウィザード」から簡単にインストールする事が出来る。
今回はPHPも動かすので、CGI機能を有効化しておく。
[サーバーマネージャー] -> [役割と機能追加] -> [サーバーの役割] --- ■ Webサーバー (IIS) ├■ Webサーバー │├■ HTTP 共通機能 ││├■ HTTP エラー ││├■ ディレクトリの参照 ││├■ 規定のドキュメント ││├■ HTTPエラー ││├■ 静的なコンテンツ ││├□ HTTP リダイレクト ││└□ WebDAV 発行 ││ │├■ セキュリティ ││├■ 要求フィルター ││├□ IIS クライアント証明書マッピング認証 ││├□ IP およびドメインの制御 ││├□ SSL 証明書の集中サポート ││├□ URL 承認 ││├□ Windows 認証 ││├□ クライアント証明書マッピング認証 ││├■ ダイジェスト認証 ││└□ 基本認証 ││ │├■ パフォーマンス ││├■ 静的なコンテンツの圧縮 ││└□ 動的なコンテンツの圧縮 ││ │├■ 状態と診断 ││├■ HTTP ログ ││├□ ODBC ログ ││├□ カスタムログ ││├□ トレース ││├□ ログ ツール ││└□ 要求の監視 ││ │└■ アプリケーション開発 │ ├□ .NET 拡張機能 3.5 │ ├□ .NET 拡張機能 4.5 │ ├□ Application Initialization │ ├□ ASP │ ├□ ASP.NET 3.5 │ ├□ ASP.NET 4.5 │ ├■ CGI │ ├□ ISAPIフィルター │ ├□ ISAPI拡張 │ ├□ WebSocketプロトコル │ └□ サーバー側インクルード │ ├□ FTP サーバー │├□ FTP サービス │└□ FTP 拡張 │ └■ 管理ツール ├■ IIS 管理コンソール ├□ IIS 6 管理互換 │├□ IIS 6 メタベース互換 │├□ IIS 6 WMI互換 │├□ IIS 6 スクリプトツール │└□ IIS 6 管理コンソール │ ├□ IIS 管理スクリプトおよびツール └□ 管理サービス
2. PHP連携
事前にPHP.NETから、Windows用のPHPバイナリをダウンロードしておく。
PHPにはThread SafeとNon Thread Safeの二種類があるが、特別な事情が無い限りThread Safeを使う。
PHPのバイナリ保存先については、PHPのディレクトリ名にバージョン番号を付け、
シンボリックリンクでポインタを張ると、バージョンアップ・バージョンダウンのメンテナンスをやりやすくなる。
筆者がよくやるディレクトリ構成例 --- [リンク] - C:\php [実ファイル] - C:\php-7.0.10 [実ファイル] - C:\php-7.0.00 [実ファイル] - C:\php-5.6.25 --- cmd> dir <SYMLINKD> php [php-7.0.10] <DIR> php-7.0.10 <DIR> php-7.0.00 <DIR> php-5.6.25
上記の状態を作るには、下記コマンドを実行する。
Linuxのlnコマンドと書式が逆になる点に注意する。
コマンドオプション --- cmd> mklink [[/D] | [/H] | [/J]] リンク ターゲット --- cmd> mklink /D php php-7.0.10
IISからPHPを利用するには、ハンドラーマッピングにPHPを追加する必要がある。
この時、IISの「アプリケーション開発 - CGI」を利用する。
[IISマネージャー] -> [Webサイト] -> [ハンドラーマッピング] --- ┌────────┬─────────┐ │要求パス │*.php │ ├────────┼─────────┤ │モジュール │FastCgiModule │ ├────────┼─────────┤ │実行可能ファイル│C:\php\php-cgi.exe│ ├────────┼─────────┤ │名前 │IIS-PHP-Module │ └────────┴─────────┘
PHPからSQL Serverへ接続してDB操作を行うには、
MicrosoftのPHPドライバを追加インストールし、PHPエクステンションとしてロードする必要がある。
今回使うPHPドライバは下記Developer Networkから入手する。
PHPドライバはexe形式になっている為、exeを実行してドライバを展開(インストール)する。
ドライバはOSのビット数と、PHPの動作モード毎に数種類がインストールされる為、
自環境に合ったPHPドライバを "C:\php\ext" に移動させる。
OSのビット数 | Thread Safe | Non Thread Safe |
32bit | php_sqlsrv_7_ts_x86.dll | php_sqlsrv_7_nts_x86.dll |
php_pdo_sqlsrv_7_ts_x86.dll | php_pdo_sqlsrv_7_nts_x86.dll | |
64bit | php_sqlsrv_7_ts_x64.dll | php_sqlsrv_7_nts_x64.dll |
php_pdo_sqlsrv_7_ts_x64.dll | php_pdo_sqlsrv_7_nts_x64.dll |
PHPドライバをインストールした後はphp.iniを編集し、PHPドライバをエクステンションとして読み込ませる。
PHPエクステンションを "C:\php\ext" にインストールしている場合、
下記設定をphp.iniの[PHP]ディレクティブに追記する。
ODBCのエクステンションは読み込まなくても大丈夫な筈だが、エラー抑制の為追加しておく。
[PHP] ; Directory in which the loadable extensions (modules) reside. ; http://php.net/extension-dir ; extension_dir = "./" ; On windows: extension_dir = "ext" ;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;; extension=php_pdo_odbc.dll ; Extension DLL for access to Microsoft SQL Server. ; See "Microsoft SQL Server PHP Deirver" ; "https://msdn.microsoft.com/ja-jp/library/mt683517(v=sql.105).aspx" extension=php_pdo_sqlsrv_7_ts_x64.dll extension=php_sqlsrv_7_ts_x64.dll
PHPエクステンションの設定が完了したら、管理ツールからIISを再起動させ、
Webブラウザからphpinfoを開いてドライバ読込み状況を確認する。
今回追加したPHPドライバを正常に読み込んでいる場合、下記ステータスがphpinfoに表示される。