1

I have got to work on a Symfony v4.2, that connects to an external MS SQL Server database. The error I get is:

Attempted to call function "sqlsrv_configure" from the global namespace.

I know there're already posts about it, but none focused on Laravel Homestead, that runs on Ubuntu 20.04.2.

I am running Homestead v12.3.1, Settler v11.3.0.

So far, I have understood that I should install both the sqlsrv and pdo_sqlsrv extensions.

I have just done that. In this case, given the fact that in Laravel Homestead there are several versions of PHP that you can switch:

$ sudo update-alternatives --config php:

There are 7 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
  0            /usr/bin/php8.0   80        auto mode
  1            /usr/bin/php5.6   56        manual mode
* 2            /usr/bin/php7.0   70        manual mode
  3            /usr/bin/php7.1   71        manual mode
  4            /usr/bin/php7.2   72        manual mode
  5            /usr/bin/php7.3   73        manual mode
  6            /usr/bin/php7.4   74        manual mode
  7            /usr/bin/php8.0   80        manual mode

As you can see, I am currently using the 7.0 ... it actually can be any.

What I did to install the extensions was to execute the following commands:

$ sudo apt-get install unixodbc-dev Reference

And the following, according to this other reference:

$ sudo pecl install sqlsrv

$ sudo pecl install pdo_sqlsrv

And the output was:

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


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

Indeed

$ ls -lah /usr/lib/php/20200930/

Those sqlsrv.ini and pdo_sqlsrv.ini do exist.

But then, when I searched for those recently installed extensions

$ php -m | grep sqlsrv

$ php -m | grep pdo_sqlsrv

the result was empty.

Then I restarted the php-fpm service like so:

$ sudo systemctl restart php7.0-fpm

$ php -m

But I got these warnings:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/pdo_sqlsrv.so' - /usr/lib/php/20200930/pdo_sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/sqlsrv.so' - /usr/lib/php/20200930/sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/pdo_sqlsrv.so' - /usr/lib/php/20200930/pdo_sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0

Then I changed directory to

$ cd /etc/php/7.0/mods-available

and $ ls -lah

and edited both the

sqlsrv.ini

; priority=20
extension=/usr/lib/php/20200930/sqlsrv.so

pdo_sqlsrv.ini

; priority=30
extension=/usr/lib/php/20200930/pdo_sqlsrv.so

files.

And I get the same error.

Moreover, even if I change the files to:

sqlsrv.ini

; priority=20
extension=sqlsrv.so

pdo_sqlsrv.ini

; priority=30
extension=pdo_sqlsrv.so

Now I get an slightly different error in the directory:

$ php -m

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/pdo_sqlsrv.so' - /usr/lib/php/20151012/pdo_sqlsrv.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 '/usr/lib/php/20151012/sqlsrv.so' - /usr/lib/php/20151012/sqlsrv.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 '/usr/lib/php/20151012/pdo_sqlsrv.so' - /usr/lib/php/20151012/pdo_sqlsrv.so: cannot open shared object file: No such file or directory in Unknown on line 0

It looks like it simply can't load the libraries :(

According to this answer

$ find / -name 'sqlsrv' 2>&1 | grep -v 'Permission denied'

returns ( command reference ):

/usr/share/php/docs/sqlsrv
/var/lib/php/modules/7.1/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.1/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.1/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.1/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.4/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.4/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.4/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.4/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.3/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.3/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.3/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.3/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.0/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.0/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.0/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.0/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/5.6/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/5.6/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/5.6/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/5.6/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.2/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.2/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.2/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/7.2/phpdbg/enabled_by_admin/sqlsrv
/var/lib/php/modules/8.0/cli/enabled_by_admin/sqlsrv
/var/lib/php/modules/8.0/cgi/enabled_by_admin/sqlsrv
/var/lib/php/modules/8.0/fpm/enabled_by_admin/sqlsrv
/var/lib/php/modules/8.0/phpdbg/enabled_by_admin/sqlsrv

$ find / -name 'sqlsrv.so' 2>&1 | grep -v 'Permission denied'

/usr/lib/php/20200930/sqlsrv.so

$ find / -name 'pdo_sqlsrv.so' 2>&1 | grep -v 'Permission denied'

/usr/lib/php/20200930/pdo_sqlsrv.so

Another try I did was according to yet this another answer, where I executed:

$ pear config-set php_ini /etc/php/7.0/fpm/php.ini

And I got:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/pdo_sqlsrv.so' - /usr/lib/php/20200930/pdo_sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/sqlsrv.so' - /usr/lib/php/20200930/sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20200930/pdo_sqlsrv.so' - /usr/lib/php/20200930/pdo_sqlsrv.so: undefined symbol: zval_ptr_dtor in Unknown on line 0
config-set succeeded

But I still get the same warnings.

Here's a small explanation, and there but I don't get it :(

What else do I have to do to make PHP load those both sqlsrv.so and pdo_slqsrv.so extensions here on Laravel Homestead?

Are there any other alternatives where I can use a Symfony 4.2 app with the sqlsrv extension enabled? Maybe a virtual machine? Any ideas? Can anyone shed some good light to have this Symfony 4.2 app up and running and being able to connect with a 2017 MS SQL Server?

Pathros
  • 10,042
  • 20
  • 90
  • 156

0 Answers0