環境
- Ubuntu 20.04.1 LTS (Focal Fossa)
- PHP 7.4.10
Microsoft のドキュメント
インストールの流れ
先にODBCドライバをインストールした後、PHP側のpeclでドライバをインストールする。
ODBCドライバがない状態では、peclでのインストール時にビルドに失敗する。
ODBCドライバのインストール
マニュアルから
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql17
# optional: for bcp and sqlcmd
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
# optional: for unixODBC development headers
sudo apt-get install unixodbc-dev
問題発生
マニュアルではoptional
になっているが、PHPのドライバをビルドするにはunixodbc-dev
が必要。
しかし、素直にインストールしようとすると失敗する。
エラー
以下のパッケージには満たせない依存関係があります:
unixodbc-dev : 依存: unixodbc (= 2.3.7)
依存: odbcinst1debian2 (= 2.3.7) しかし、インストールされようとしていません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
apt list
してみると
$ apt list unixodbc*
一覧表示... 完了
unixodbc-dev/bionic,focal 2.3.7 amd64
unixodbc-dev/focal 2.3.6-0.1build1 i386
unixodbc/bionic,focal 2.3.7 amd64
unixodbc/focal 2.3.6-0.1build1 i386
$ apt list odbcinst1debian2
一覧表示... 完了
odbcinst1debian2/bionic 2.3.7 amd64
odbcinst1debian2/focal 2.3.6-0.1build1 i386
amd64
版はfocal
向けのバージョンが合っていない。
解決策
同じバージョンで指定して、同時にインストールする。
sudo apt install unixodbc-dev=2.3.6-0.1build1 libodbc1=2.3.6-0.1build1 odbcinst1debian2=2.3.6-0.1build1
失敗する方法
-
i386版
ならバージョンが合っているのでunixodbc-dev:i386
をインストール ⇒ 後に続くpecl install sqlsrv
に失敗する。 -
unixodbc-dev=2.3.6-0.1build1
をインストール ⇒ 依存関係をインストールしてくれない。
PHP用のドライバインストール
上記の方法でunixodbc-dev
のインストールに成功していれば、マニュアル通りに問題なくインストールできる。
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.4/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.4/mods-available/pdo_sqlsrv.ini
exit
sudo phpenmod -v 7.4 sqlsrv pdo_sqlsrv```