#author("2016-09-11T00:46:20+09:00","default:nowsky","nowsky")
#author("2016-09-11T00:47:29+09:00","default:nowsky","nowsky")
*Internet Information Services [#x7f34cce]
-[[Microsoft Developer Network "Web サーバー(IIS)":+https://msdn.microsoft.com/ja-jp/library/hh831725(v=ws.11).aspx]]

Windowsに標準搭載されているWebサーバ。Windows Serverと一部のWindows Clientで利用出来る。
IISではHTTP/HTTPS以外にもSMTP機能を同梱しているのと、.NETアプリと親和性の高い点が特長。
以前、Code Red・Nimdaなどのウイルスから狙われ、大規模障害を起こした事がある。
~
*メモ [#fd28ebb5]
-Windows Client版のIISは、Webサイト作成数・TCPコネクション数などに機能制限がかかっている。
-PHP、ASP等を利用する場合は追加ソフトをインストールする必要がある。
-IIS用プラグインインストーラとして、[[Microsoft Web Platform Installer:+https://www.microsoft.com/web/downloads/platform.aspx]]が用意されている。
~
*インストール [#m54d88dd]
&size(16){&font(b){0. 前提条件};};
-構築環境
 [VM]:   Hyper-V ver6.3.9600
 [OS]:   WindowsServer2012R2 64bit
 [MEM]:  4GB
 [HDD]:  C:50GB / D:50GB
 [IIS]:  IIS 8.5.9600

~
&size(16){&font(b){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 管理スクリプトおよびツール
   └□ 管理サービス

~
&size(16){&font(b){2. PHP連携};};
事前に[[PHP.NET:+https://secure.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    │
 └────────┴─────────┘
~
*SQL Server接続 [#m12e7271]
PHPからSQL Serverへ接続してDB操作を行うには、
MicrosoftのPHPドライバを追加インストールし、PHPエクステンションとしてロードする必要がある。
今回使うPHPドライバは下記Developer Networkから入手する。
-[[Microsoft SQL Server 用 PHP Driver:+https://msdn.microsoft.com/ja-jp/library/dn865013(v=sql.105).aspx]]
-[[Microsoft Drivers for PHP for SQL Server:+https://www.microsoft.com/en-us/download/details.aspx?id=20098]]

 
PHPドライバはexe形式になっている為、exeを実行してドライバを展開(インストール)する。
ドライバはOSのビット数と、PHPの動作モード毎に数種類がインストールされる為、
自環境に合ったPHPドライバを &font(b){"C:\php\ext" に移動};させる。
-"SQLSRV40.EXE"ドライバのファイル例
|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の&font(b){[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を再起動させ、
PHPエクステンションの設定が完了したら、管理ツールからIISを再起動させ、
Webブラウザからphpinfoを開いてドライバ読込み状況を確認する。
今回追加したPHPドライバを正常に読み込んでいる場合、下記のステータスがphpinfoに表示される。
今回追加したPHPドライバを正常に読み込んでいる場合、下記ステータスがphpinfoに表示される。
&ref(phpinfo_pdo.png,left,nowrap,50%);