LoginSignup
5
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-01-23

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

前提条件

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 のインストール
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ファイルを読み込むようです。

以上です。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5