Windows 10 + IIS + PHP 7+CakePHP 3＋MSSQLを、サブディレクトリに入れて使う

この組み合わせの記事がなかなか探せず、２，３日かかかったのでメモ。
どなたかのお役にたてば。

##PHPの選択
SQLサーバの用PDOはPHP 7.1系では動かなかったので(2017/6/23現在)PHPは7.0系で。
自分はntsの64bitを選択。そのうち7.1用のPDOが出るかもしれない。

##SQL Server用のPDOの入手
https://www.microsoft.com/en-us/download/details.aspx?id=20098
から7.0用をダウンロードして解凍（自分はntsの64bitを使用)。
適切なものをextにコピー。
php.iniに
extension=php_sqlsrv_7_nts_x64.dll
extension=php_pdo_sqlsrv_7_nts_x64.dll
とか追記しておく。

## CakePHPを取ってくるために、composerをいれる
公式サイトのexeインストーラーを使うとcomposerさんがどこに入ったか解らなくなってしまった。
なのでここはphpさんに取ってもらう。
取ってくるときにSSLを使うようなので、php.iniで
extension=php_openssl.dll
を有効にしておく。
extension=php_intl.dll
も有効にしておかないと、CakePHPを引っ張ってくるときにエラーが出るので有効にする。
タイムゾーンもAsia/Tokyoをセットしておく。

　mkdir c:\bin　（場所はお好みで。作ったらパスを通しておく）
　cd c:\bin
　php -r "readfile('https://getcomposer.org/installer');" | php

composer xxx で起動できるようにバッチ化。
echo @php "%~dp0composer.phar" %*>composer.bat

##Gitちゃんを入れる
とりあえず入れておく。
https://git-for-windows.github.io/

##ComposerでhogeにCakePHPを入れる
以下、コマンドは管理者権限で。
cd c:\intepub\wwwroot
mkdir hoge
ディレクトリを作ったら、一つ上(c:\inetpub\wwwroot)で下記を実行
composer create-project --prefer-dist cakephp/app hoge

##リライト用のweb.configを作る
付属の.htaccessに手を加えてインポートするのが簡単。

###リライトモジュールのインストール
IIS用urlリライトモジュールは、windows 10 だとwebinstallerから落とすと蹴られた。
なので、英語版のスタンドアロンのインストーラを使ってインストールする。
https://www.iis.net/downloads/microsoft/url-rewrite

###web.configをhogeの下におく
https://book.cakephp.org/3.0/ja/installation.html
にIIS用のweb.configがおいてある。このリライト用urlを/hogeからに書き換える

```xml:web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Exclude direct access to webroot/*"
                  stopProcessing="true">
                    <match url="^/hoge/webroot/(.*)$" ignoreCase="false" />
                    <action type="None" />
                </rule>
                <rule name="Rewrite routed access to assets(img, css, files, js, favicon)"
                  stopProcessing="true">
                    <match url="^(img|css|files|js|favicon.ico)(.*)$" />
                    <action type="Rewrite" url="/hoge/webroot/{R:1}{R:2}"
                      appendQueryString="false" />
                </rule>
                <rule name="Rewrite requested file/folder to index.php"
                  stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <action type="Rewrite" url="/hoge/index.php"
                      appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
```

##書き込み権限の付与
hoge/tmp
hoge/logs
にIIS_IUSRSの書き込み権限を与えておく。

##ここまでをチェック
http://localhost/hoge
でCakePHPのテストページが見えることを確認。
データベースはまだ警告が出ている。

##DBの設定
先にSQLサーバ認証でユーザとDBは作っておく。
config/app.phpのDBの設定に(220行目あたり)をMysql用の記述から下記に変えておく。
自分はSQLExpressなのでホスト名に\sqlexpressが入っている。
"schema"を設定しないと、チェックは通るがbakeで
"it has 0 columns"とかいわれてがっかりする。

    'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Sqlserver',
            'persistent' => false,
            'host' => 'localhost\sqlexpress',
            'username' => 'hoge_admin',
            'password' => 'hogehoge',
            'database' => 'fuga',
            'schema' => 'dbo',

##再度チェック
http://localhost/hoge

でCakePHPの赤いトップページと、チェック項目が全てクリアになっていたらOK。