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?