（Laravel/homestead）PHP7.2 のSQL Server用ドライバを設定しDBに接続するまで

homestead環境でLaravelプロジェクトからSQL Serverインスタンスに接続をするために、ubuntuにインストールしたPHP7.2 にSQL Server用ドライバ（pdo_sqlsrv）を設定します。（2019/1/24時点では、PHP7.3向けのSQL Serverドライバはリリースされていないため、PHP7.2を使用します。→[Github: No stable release with PHP 7.3](https://github.com/Microsoft/msphpsql/issues/901)）

## 前提条件
Windows10に構築したLaravel/Homestead (7.20.0) 環境で作成したLaravelプロジェクト (5.5) から SQL Server2017 Developper Edition にSQL Server認証で接続し、`php artisan migrate`で、デフォルトのUsersとPasswordResetテーブルを作成する手順を記載します。

Homesteadの構築手順は割愛します。
初回vagrant upした後の設定になります。

## SQL Serverドライバの設定
ubuntu上のPHP7.2がSQL Serverに通信をするためのモジュールを設定します。

#### (1) ssh接続し`php72` を実行
```
php72
```
homesteadデフォルトのPHPのバージョンを7.2にするエイリアスのコマンドです。
（中身は`vagrant up`を実行したhomesteadのディレクトリのresources/aliasにスクリプトが存在しました。)
#### (2) pdo_sqlsrv をPHPモジュールに登録
下記のリンクに記載されている手順でスクリプトを実行して、pdo_sqlsrvを展開しました。
[Linux と macOS の Microsoft Drivers for PHP for SQL Server のインストール](https://docs.microsoft.com/ja-jp/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-2017)
homesteadはubuntu18.04で、PHP7.2はインストール済みだったので実行スクリプトは下記の通りです。

```
sudo su 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql17
sudo ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
sudo apt-get install unixodbc-dev

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-sqlsrv.ini
exit
```
以上のスクリプトでpeclでsqlsrvとpdo_sqlsrvがphpに登録されます。
nginxのリスタートをしてください。（hostで`vagrant reload`など）

## SQL Server 2017 Developper をインストール
Host側のWin10に下記URLからSQL Server 2017の無償版（開発環境のみで使用可能）をインストールします。
https://www.microsoft.com/en-us/sql-server/sql-server-2017-editions
併せて、操作用にSQL Server Management Studioをインストールしておく。

## ユーザー作成とSQL Server 認証設定
#### （1） ユーザー作成
SQL Server Management Studioのセキュリティ> ログインからSQL Serverにアクセスできる権限のユーザーを追加します。
SQL Server認証でユーザーID とPasswordを入力し接続できるようにします。
#### （2） SQL Server 認証の有効化
併せて、サーバーにログインする際の認証方法に、SQL Server認証も有効にします。
<<サーバー名>>を右クリック　
→　プロパティ　→　セキュリティ
→　Windows認証 と SQL Server認証を使用可能にする。

#### （3） SQL Server ポート設定
構成マネージャーからtcpipの接続情報を開き、2点設定をします。
1. Ipv1～Ipvallまですべて動的ポート設定をオフにする。
2. Ipv1～Ipvallまですべて開きたい任意のポート番号を設定する。

#### homesteadでLaravelプロジェクトを作成し、migrationを実行
```
cd ~/code
composer create-project Laravel/Laravel=5.5.* --prefer-dist <<プロジェクト名>>
```

.envファイルを下記の通り書き換えます。

```
DB_CONNECTION=sqlsrv
DB_HOST=<<hostのipアドレス>>
DB_PORT=<<先に設定したhostのsql serverのポート番号>>
DB_DATABASE=homestead
DB_USERNAME=<<先に作った接続用ユーザー名>>
DB_PASSWORD=<<先に作った接続ユーザーのパスワード>>
```

artisan コマンドでマイグレーションを実行します。

```
cd <<プロジェクト名>>
php artisan migrate

```

###  2019年1月31日追記-fpm経由でのphp実行時のiniファイルを追加してSQL Serverドライバの登録を行う
ブラウザでページにアクセスした際に、ドライバのエラーが出ました。
これはfpm経由でのphp実行時の設定情報を表示した際にSQL Serverドライバーの参照先が設定されていないからだと分かりました。

Iniファイルの一覧である`Additional .ini files parsed`の欄にSQL Serverドライバの設定を追加するには

`Scan this dir for additional .ini files`の参照先に、下記のiniファイル
30-pdo_sqlsrv.ini
20-sqlsrv.ini
を追加して、SQL Serverドライバのパスを設定しなければならなかったようです。

### 対応
(1) phpinfo()を出力するbladeテンプレートをルーティング定義する。
(2) phpinfo()画面から、Scan this dir for additional .ini files　の参照先をメモ
(3) メモしたディレクトリを下記コマンドに当てはめて実行

```
echo "extension=sqlsrv.so" >> [[メモしたディレクトリ]]/20-sqlsrv.ini
echo "extension=pdo_sqlsrv.so" >> [[メモしたディレクトリ]]/30-pdo_sqlsrv.ini
```

cliでの`php artisan migrate`の時にはcli向けのiniファイルを、リクエストに対してサーバーソフトウェアがphpを実行する時にはまた別のiniファイルを読み込むようです。


以上です。