msphpsql: PHP Warning: PHP Startup: Unable to load dynamic library 'sqlsrv.so' & 'pdo_sqlsrv.so'

Hi, I wanted to be able to access SQL Server from Ubuntu 18.04, so I followed this procedure:

sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

#Download appropriate package for the OS version - Ubuntu 18.04
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

# 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

# I did not run the following line
# sudo apt-get -y install php-pear php7.2-dev

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.2/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.2/mods-available/pdo_sqlsrv.ini
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.3/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.3/mods-available/pdo_sqlsrv.ini
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 sqlsrv pdo_sqlsrv
sudo service apache2 restart

I got only warnings with sudo pecl install pdo_sqlsrv & pdo_sqlsrv :

Notice: Trying to access array offset on value of type bool in PEAR/REST.php on line 187
PHP Notice:  Trying to access array offset on value of type bool in /usr/share/php/PEAR/REST.php on line 187

Notice: Trying to access array offset on value of type bool in PEAR/REST.php on line 187
PHP Notice:  Trying to access array offset on value of type bool in /usr/share/php/PEAR/REST.php on line 187

Notice: Trying to access array offset on value of type bool in PEAR/REST.php on line 187
PHP Notice:  Trying to access array offset on value of type bool in /usr/share/php/PEAR/REST.php on line 187

Notice: Trying to access array offset on value of type bool in PEAR/REST.php on line 187
PHP Notice:  Trying to access array offset on value of type bool in /usr/share/php/PEAR/REST.php on line 187
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update

I did not try to rectify the above notices… No errors were reported, so I thought all was ok, until I ran ‘php -v’ which gives me:

PHP Warning:  PHP Startup: Unable to load dynamic library 'sqlsrv.so' (tried: /usr/lib/php/20190902/sqlsrv.so (/usr/lib/php/20190902/sqlsrv.so: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/sqlsrv.so.so (/usr/lib/php/20190902/sqlsrv.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_sqlsrv.so' (tried: /usr/lib/php/20190902/pdo_sqlsrv.so (/usr/lib/php/20190902/pdo_sqlsrv.so: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/pdo_sqlsrv.so.so (/usr/lib/php/20190902/pdo_sqlsrv.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.4.7 (cli) (built: Jun 12 2020 07:44:05) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.7, Copyright (c), by Zend Technologies

I have checked ‘/usr/lib/php/20190902/’ which indeed does not contain these files. They are actually in ‘/usr/lib/php/20170718/’

What did I do wrong in the installation? How do I fix this?

Thanks for your help people.

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 33 (13 by maintainers)

Most upvoted comments

and yes it works my friend. Thank you. Here is the full sqlsrv & pdo_sqlsrv install script for multiple php versions.

# Microsoft ODBC 17
sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

#Download appropriate package for the OS version - Ubuntu 18.04
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

# 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

# Microsoft ODBC 17
# 7.4
sudo apt-get -y install php-pear php7.4-dev
sudo update-alternatives --set php /usr/bin/php7.4
sudo update-alternatives --set phar /usr/bin/phar7.4
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.4
sudo update-alternatives --set phpize /usr/bin/phpize7.4
sudo update-alternatives --set php-config /usr/bin/php-config7.4

sudo pecl uninstall -r sqlsrv 
sudo pecl uninstall -r pdo_sqlsrv 
sudo pecl -d php_suffix=7.4 install sqlsrv
sudo pecl -d php_suffix=7.4 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
sudo service apache2 restart


# 7.3
sudo apt-get -y install php-pear php7.3-dev
sudo update-alternatives --set php /usr/bin/php7.3
sudo update-alternatives --set phar /usr/bin/phar7.3
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.3
sudo update-alternatives --set phpize /usr/bin/phpize7.3
sudo update-alternatives --set php-config /usr/bin/php-config7.3

sudo pecl uninstall -r sqlsrv 
sudo pecl uninstall -r pdo_sqlsrv 
sudo pecl -d php_suffix=7.3 install sqlsrv
sudo pecl -d php_suffix=7.3 install pdo_sqlsrv
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.3/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.3/mods-available/pdo_sqlsrv.ini
exit
sudo phpenmod -v 7.3 sqlsrv pdo_sqlsrv
sudo service apache2 restart

# 7.2
sudo apt-get -y install php-pear php7.2-dev
sudo update-alternatives --set php /usr/bin/php7.2
sudo update-alternatives --set phar /usr/bin/phar7.2
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.2
sudo update-alternatives --set phpize /usr/bin/phpize7.2
sudo update-alternatives --set php-config /usr/bin/php-config7.2

sudo pecl uninstall -r sqlsrv 
sudo pecl uninstall -r pdo_sqlsrv 
sudo pecl -d php_suffix=7.2 install sqlsrv
sudo pecl -d php_suffix=7.2 install pdo_sqlsrv
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.2/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.2/mods-available/pdo_sqlsrv.ini
exit
sudo phpenmod -v 7.2 sqlsrv pdo_sqlsrv
sudo service apache2 restart


Hi @conandrum

In addition to using update-alternatives, I realized that you need to do the following too:

1. sudo pecl uninstall -r sqlsrv 
2. sudo pecl uninstall -r pdo_sqlsrv 
3. sudo pecl -d php_suffix=7.2 install sqlsrv
4. sudo pecl -d php_suffix=7.2 install pdo_sqlsrv

Note that -r, --register-only do not remove files but only register the packages as not installed. Then repeat the above steps for the other php versions.

I did a quick test myself and was able to install sqlsrv with all php versions:

image

Using update-alternatives is the key to switch between php versions.

Hi @GlistenSTAR

You should be able to use phpdismod

For example,

sudo phpdismod -v 7.3 sqlsrv pdo_sqlsrv

@yitam After completing all the steps below specific to 7.4, I can confirm that no errors are being reported when running php -v

sudo apt-get -y install php-pear php7.4-dev

sudo update-alternatives --set php /usr/bin/php7.4
sudo update-alternatives --set phar /usr/bin/phar7.4
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.4
sudo update-alternatives --set phpize /usr/bin/phpize7.4
sudo update-alternatives --set php-config /usr/bin/php-config7.4

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
sudo service apache2 restart

Wonderful, you are perfect on this area. Thank your reply.

@yitam I did one more test. I run sudo pecl uninstall sqlsrv This time, I installed also the sudo apt-get -y install php7.4-dev Then again: sudo pecl install sqlsrv

Success with paths showing 20190902:

Installing shared extensions:     /tmp/pear/temp/pear-build-root6qqGUU/install-sqlsrv-5.8.1/usr/lib/php/20190902/
running: find "/tmp/pear/temp/pear-build-root6qqGUU/install-sqlsrv-5.8.1" | xargs ls -dils
147600   4 drwxr-xr-x 3 root root   4096 Jun 24 06:42 /tmp/pear/temp/pear-build-root6qqGUU/install-sqlsrv-5.8.1
147606   4 drwxr-xr-x 3 root root   4096 Jun 24 06:42 /tmp/pear/temp/pear-build-root6qqGUU/install-sqlsrv-5.8.1/usr
147607   4 drwxr-xr-x 3 root root   4096 Jun 24 06:42 /tmp/pear/temp/pear-build-root6qqGUU/install-sqlsrv-5.8.1/usr/lib
147608   4 drwxr-xr-x 3 root root   4096 Jun 24 06:42 /tmp/pear/temp/pear-build-root6qqGUU/install-sqlsrv-5.8.1/usr/lib/php
147609   4 drwxr-xr-x 2 root root   4096 Jun 24 06:42 /tmp/pear/temp/pear-build-root6qqGUU/install-sqlsrv-5.8.1/usr/lib/php/20190902
 49484 380 -rwxr-xr-x 1 root root 385528 Jun 24 06:42 /tmp/pear/temp/pear-build-root6qqGUU/install-sqlsrv-5.8.1/usr/lib/php/20190902/sqlsrv.so

Build process completed successfully
Installing '/usr/lib/php/20190902/sqlsrv.so'
install ok: channel://pecl.php.net/sqlsrv-5.8.1
configuration option "php_ini" is not set to php.ini location
You should add "extension=sqlsrv.so" to php.ini

I will continue and report back

@conandrum you’re using multiple php versions, and which php version do you want?

If you want php 7.4 only, please uninstall the others and follow the online instructions

If you want to keep more than one php version, please check how to switch between multiple php versions in Ubuntu

This related issue #1142 might give you some ideas, or please check this WIKI entry