When trying to get PHP v7.1 running on a Debian Buster development box I ran into an issue where pecl would compile the sqlsrv.so and pdo_sqlsrv.so files for the wrong version of PHP.
It didn’t seem obvious what was going on at first. I went through the very good Microsoft ODBC for Linux installer guide and things went well up until pecl delivered the drivers.
I noticed something was off as the /usr/lib/php folder was a folder dated 2018, when I was expecting it to be 20160303 for PHP 7.1. I checked the settings using update-alternatives.
$ update-alternatives --list php
/usr/bin/php7.1
But pecl was obviously not compiling right. The last resort was to remove PHP v7.3 and all related modules from the system and retry.
$ sudo apt-get remove php7.3-common
Now when I recompile the drivers using pecl install it works just as planned.
$ sudo pecl install sqlsrv
downloading sqlsrv-5.6.1.tgz …
Starting to download sqlsrv-5.6.1.tgz (183,396 bytes)
…………………………………done: 183,396 bytes
34 source files, building
running: phpize
Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303
...
And repeat for pdo_sqlsrv.ini, I get the .so files created in the /usr/lib/php/20160303 folder. Then add the sqlsrv.ini file and link it, but with 7.1. After running php -v I see no errors and php -m shows the two sql modules loaded.
$ php -v
PHP 7.1.30-1+0~20190531112602.19+stretch~1.gbpab9d28 (cli) (built: May 31 2019 11:26:03) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.1.30-1+0~20190531112602.19+stretch~1.gbpab9d28, Copyright (c) 1999-2018, by Zend Technologies
$ php -m | grep sqlsrv
pdo_sqlsrv
sqlsrv