(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)
前提条件
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ファイルを読み込むようです。
以上です。
Author And Source
この問題について((Laravel/homestead)PHP7.2 のSQL Server用ドライバを設定しDBに接続するまで), 我々は、より多くの情報をここで見つけました https://qiita.com/ttn_tt/items/c9e78049e203956649db著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .