php - Problems with msqli and mssql and broken php7.2 on linux

I have a local application with laravel 5.5 using a mysql databse on my ubuntu18.04.1. It is hosted on a server with php7.2, and I had the same version of php in my system. All was working fine. Yesterday, I tried to connect my app with SQL Server to get data from a database, and my nightmare started.

I added the data base connection info to the database.php file in my laravel app following this format

 'sqlsrv' => [
        'driver' => 'sqlsrv',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '1433'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
    ],

All seemed to be working fine, but when I tried to retrieve data, I had a connection exception, laravel was telling me that the sqlsrv driver wasn't found. I thought that, perhaps, the sqlsrv extension wasn't enabled, so I went to php.ini to activate it, but I didn't found it, so I started to investigate and I discovered that I had to install it from the microsoft webpage. I tried in all ways to add the proper .so, I installed and deinstalled php7.2 and I don't know how php7.4 folders and modules are on my system too. I followed this site (in spanish) to install a docker and try to prevent this situation in the future. I followed it till the $ sudo docker-compose up -d nginx mysql phpmyadmin part, then I tried to run my app and it works, it connects properly, but I cannot access to phpmyadmin via http://localhost:3030/, I have phpMyAdmin Error because it doesn't find the mysqli extension.

Then I tired to run php -S as I used to run when I trying to connect to phpMyAdmin and I get this

$ php -S localhost:3030
[Thu Dec 10 13:17:50 2020] PHP Warning:  PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20170718/mysqli (/usr/lib/php/20170718/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/mysqli.so (/usr/lib/php/20170718/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
[Thu Dec 10 13:17:50 2020] PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20170718/pdo_mysql (/usr/lib/php/20170718/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_mysql.so (/usr/lib/php/20170718/pdo_mysql.so: undefined symbol: mysqlnd_allocator)) in Unknown on line 0
[Thu Dec 10 13:17:50 2020] PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20170718/pdo_sqlite (/usr/lib/php/20170718/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_sqlite.so (/usr/lib/php/20170718/pdo_sqlite.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
[Thu Dec 10 13:17:50 2020] PHP Warning:  PHP Startup: Unable to load dynamic library 'pgsql' (tried: /usr/lib/php/20170718/pgsql (/usr/lib/php/20170718/pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pgsql.so (/usr/lib/php/20170718/pgsql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
[Thu Dec 10 13:17:50 2020] Failed to listen on localhost:3030 (reason: Address already in use)

I ran php --ini to find where the configuration file is and edited the extension of mysqli to enable it, now when y run again php --ini I get this warns

$ php --ini
PHP Warning:  PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20170718/mysqli (/usr/lib/php/20170718/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/mysqli.so (/usr/lib/php/20170718/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20170718/pdo_mysql (/usr/lib/php/20170718/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_mysql.so (/usr/lib/php/20170718/pdo_mysql.so: undefined symbol: mysqlnd_allocator)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20170718/pdo_sqlite (/usr/lib/php/20170718/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_sqlite.so (/usr/lib/php/20170718/pdo_sqlite.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 'pgsql' (tried: /usr/lib/php/20170718/pgsql (/usr/lib/php/20170718/pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pgsql.so (/usr/lib/php/20170718/pgsql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Configuration File (php.ini) Path: /etc/php/7.2/cli
Loaded Configuration File:         /etc/php/7.2/cli/php.ini
Scan for additional .ini files in: /etc/php/7.2/cli/conf.d
Additional .ini files parsed:      /etc/php/7.2/cli/conf.d/10-mysqlnd.ini,
/etc/php/7.2/cli/conf.d/10-opcache.ini,
/etc/php/7.2/cli/conf.d/10-pdo.ini,
/etc/php/7.2/cli/conf.d/20-calendar.ini,
/etc/php/7.2/cli/conf.d/20-ctype.ini,
/etc/php/7.2/cli/conf.d/20-exif.ini,
/etc/php/7.2/cli/conf.d/20-fileinfo.ini,
/etc/php/7.2/cli/conf.d/20-ftp.ini,
/etc/php/7.2/cli/conf.d/20-gettext.ini,
/etc/php/7.2/cli/conf.d/20-iconv.ini,
/etc/php/7.2/cli/conf.d/20-json.ini,
/etc/php/7.2/cli/conf.d/20-mysqli.ini,
/etc/php/7.2/cli/conf.d/20-pdo_mysql.ini,
/etc/php/7.2/cli/conf.d/20-phar.ini,
/etc/php/7.2/cli/conf.d/20-posix.ini,
/etc/php/7.2/cli/conf.d/20-readline.ini,
/etc/php/7.2/cli/conf.d/20-shmop.ini,
/etc/php/7.2/cli/conf.d/20-sockets.ini,
/etc/php/7.2/cli/conf.d/20-sysvmsg.ini,
/etc/php/7.2/cli/conf.d/20-sysvsem.ini,
/etc/php/7.2/cli/conf.d/20-sysvshm.ini,
/etc/php/7.2/cli/conf.d/20-tokenizer.ini

and I still can't access to phpMyAdmin. When I run php --version I get this

$ php --version
PHP Warning:  PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20170718/mysqli (/usr/lib/php/20170718/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/mysqli.so (/usr/lib/php/20170718/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20170718/pdo_mysql (/usr/lib/php/20170718/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_mysql.so (/usr/lib/php/20170718/pdo_mysql.so: undefined symbol: mysqlnd_allocator)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20170718/pdo_sqlite (/usr/lib/php/20170718/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_sqlite.so (/usr/lib/php/20170718/pdo_sqlite.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 'pgsql' (tried: /usr/lib/php/20170718/pgsql (/usr/lib/php/20170718/pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pgsql.so (/usr/lib/php/20170718/pgsql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.2.34-8+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Oct 31 2020 16:57:15) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.34-8+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

I need to fix this asap to continue working on my laravel application and, when it's done, I need a correct way to install the proper sqlsrv drivers to be able to connect my laravel application to the sql server database.

When I run php -m I get this

$ php -m
PHP Warning:  PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20170718/mysqli (/usr/lib/php/20170718/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/mysqli.so (/usr/lib/php/20170718/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/lib/php/20170718/pdo_mysql (/usr/lib/php/20170718/pdo_mysql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_mysql.so (/usr/lib/php/20170718/pdo_mysql.so: undefined symbol: mysqlnd_allocator)) in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20170718/pdo_sqlite (/usr/lib/php/20170718/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_sqlite.so (/usr/lib/php/20170718/pdo_sqlite.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 'pgsql' (tried: /usr/lib/php/20170718/pgsql (/usr/lib/php/20170718/pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pgsql.so (/usr/lib/php/20170718/pgsql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
[PHP Modules]
calendar
Core
ctype
date
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
readline
Reflection
session
shmop
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zlib

[Zend Modules]
Zend OPcache

and this is what I have now installed with php, nginx, and sql

$ dpkg --get-selections | grep php
libapache2-mod-php7.2                           install
php-common                                      install
php-mysql                                       install
php7.2                                          install
php7.2-cli                                      install
php7.2-common                                   install
php7.2-fpm                                      install
php7.2-json                                     install
php7.2-mysql                                    install
php7.2-opcache                                  install
php7.2-readline                                 install
php7.4-common                                   install
php7.4-mysql   

$ dpkg --get-selections | grep nginx
libnginx-mod-http-geoip                         install
libnginx-mod-http-image-filter                  install
libnginx-mod-http-xslt-filter                   install
libnginx-mod-mail                               install
libnginx-mod-stream                             install
nginx                                           install
nginx-common                                    install
nginx-core                                      install

$ dpkg --get-selections | grep sql
akonadi-backend-mysql                           install
libaprutil1-dbd-sqlite3:amd64                   install
libmono-sqlite4.0-cil                           install
libmysqlclient20:amd64                          install
libmysqlcppconn7v5:amd64                        install
libqt4-sql:amd64                                install
libqt4-sql-mysql:amd64                          install
libqt5sql5:amd64                                install
libqt5sql5-mysql:amd64                          install
libqt5sql5-sqlite:amd64                         install
libsqlite3-0:amd64                              install
libvsqlitepp3v5:amd64                           install
msodbcsql17                                     install
mssql-server                                    install
mssql-tools                                     install
mysql-client                                    install
mysql-client-5.7                                install
mysql-client-core-5.7                           install
mysql-common                                    install
mysql-server                                    install
mysql-server-5.7                                install
mysql-server-core-5.7                           install
mysql-utilities                                 install
mysql-workbench                                 install
mysql-workbench-data                            install
php-mysql                                       install
php7.2-mysql                                    install
php7.4-mysql                                    install
postgresql                                      install
postgresql-10                                   install
postgresql-client-10                            install
postgresql-client-common                        install
postgresql-common                               install
postgresql-contrib                              install
python-mysql.connector                          install
python-pysqlite2                                install

Does anyone know what could I do?

If you need more info tell me in the comments and I'll update the question.

Thanks!

Update 1: Nothing is working yet

I tried to follow this thread to uninstall all php and php7 file and tried to reinstall php7.2, but I can't add the repository when I execute add-apt-repository ppa:ondrej/php becaus the terminal throws me this

Obj:1 https://download.docker.com/linux/ubuntu bionic InRelease
Ign:2 http://ppa.launchpad.net/langdalepl/gvfs-mtp/ubuntu bionic InRelease                                                                                                           
Obj:3 https://linux.teamviewer.com/deb stable InRelease                                                                                                                              
Obj:4 http://ppa.launchpad.net/ondrej/php/ubuntu bionic InRelease                                                                                                                    
Obj:5 http://dl.google.com/linux/chrome/deb stable InRelease                                                                                                                         
Obj:6 http://ppa.launchpad.net/wireshark-dev/stable/ubuntu bionic InRelease                                                                                                          
Obj:7 http://es.archive.ubuntu.com/ubuntu bionic InRelease                                                                                                                           
Des:8 http://security.ubuntu.com/ubuntu bionic-security InRelease [88,7 kB]                                                                                                          
Des:9 http://archive.neon.kde.org/user bionic InRelease [131 kB]                                                                                                                     
Obj:10 https://packages.microsoft.com/ubuntu/18.04/mssql-server-2019 bionic InRelease                                                                                                
Err:11 http://ppa.launchpad.net/langdalepl/gvfs-mtp/ubuntu bionic Release                                                                                                            
  404  Not Found [IP: 91.189.95.83 80]
Ign:12 https://storage.googleapis.com/download.dartlang.org/linux/debian stable InRelease                                                                                   
Obj:13 https://packages.microsoft.com/ubuntu/18.04/prod bionic InRelease                                                                                                    
Des:14 http://es.archive.ubuntu.com/ubuntu bionic-updates InRelease [88,7 kB]                                                                                                
Obj:15 https://packages.microsoft.com/ubuntu/16.04/prod xenial InRelease                                                                                                             
Obj:16 https://storage.googleapis.com/download.dartlang.org/linux/debian stable Release                                                                                              
Des:17 http://es.archive.ubuntu.com/ubuntu bionic-backports InRelease [74,6 kB]
E: The repository 'http://ppa.launchpad.net/gnome-shell-extensions/ppa/ubuntu bionic Release' does not have a Release file. 
N: Updating from such a repository can't be done securely, and is therefore disabled by default. 
N: See apt-secure(8) manpage for repository creation and user configuration details.

I searched for my error and found this, but it doesn't worked for me.

I tried to install php7.2 following the thread and all went well, but when I've executed sudo service apache2 restart I got this

    Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.

so I executed systemctl status apache2.service and it threw this

    apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
        ?��?�?apache2-systemd.conf
Active: failed (Result: exit-code) since Fri 2020-12-11 10:34:22 CET; 1min 31s ago
Process: 4671 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)

dic 11 10:34:22 Dev-PC apachectl[4671]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directiv
dic 11 10:34:22 Dev-PC apachectl[4671]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
dic 11 10:34:22 Dev-PC apachectl[4671]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
dic 11 10:34:22 Dev-PC apachectl[4671]: no listening sockets available, shutting down
dic 11 10:34:22 Dev-PC apachectl[4671]: AH00015: Unable to open logs
dic 11 10:34:22 Dev-PC apachectl[4671]: Action 'start' failed.
dic 11 10:34:22 Dev-PC apachectl[4671]: The Apache error log may have more information.
dic 11 10:34:22 Dev-PC systemd[1]: apache2.service: Control process exited, code=exited status=1
dic 11 10:34:22 Dev-PC systemd[1]: apache2.service: Failed with result 'exit-code'.
dic 11 10:34:22 Dev-PC systemd[1]: Failed to start The Apache HTTP Server.

What could I do now? I cannot start apache service and I don't know what is failing here...

Update 2: My app and apache2 are working now

I updated my download manager to look for available repositories and bingo, the ondrej repositories were locked, I just unlocked them and tried again to adding the repositories, it worked now. I've reinstalled apache2 with and php7.2 running sudo apt-get install apache2 and following the thread answer. But I had the same problem, so I realized that the error was showing two problems, the first problem was the missing server name and the second was that the port 80 was in use, thats why the apache2 keeps failing when trying to start. For solve the first problem, I ran sudo gedit /etc/apache2/apache2.conf and added Server Name 127.0.0.1 and after save, the first problem was solved, I solved the second problem running sudo lsof -i -n -P | grep ':80' and I discovering that nginx process was using it, so I used sudo kill [the nginx PID] to kill the nginx processes and retried to start apache2 and now it worked. I was able to access to my database in phpmyadmin but now I had another problem, when I execute php artisan serve in my laravel project, I got a PDOConnection.php error because there was a missing driver, and after execute php -m I realized that was the mysql driver so I ran sudo apt-get install php7.2-common php7.2-mysql php7.2-cli and finally I had my apache2 and my php7.2 fixed! Finally thank you all for helping me!

But now I have the same problem I had when all this started, I need to install in the correct way the sqlsrv .so drivers to be able to connect my laravel app with a SQL Server database. I was trying to download the .so files from the microsoft page but that drove me to this nightmare, so does anybody knows how could I continue to installing the sqlsrv drivers correctly?

Update 3: Finally, solved!

Looking for solutions, I checked again the microsoft webpage to find out which sqlsrv drivers I needed to run sql queries with php7.2, and I tried again to run sudo pecl install sqlsrv and sudo pecl install pdo_sqlsrv, but it didn't worked for me. Then I found another way to install the drivers without pecl, and i ran sudo apt-get install php7.2-dev and downloaded the packages with wget http://pecl.php.net/get/sqlsrv-5.3.0.tgz and wget http://pecl.php.net/get/pdo_sqlsrv-5.3.0.tgz (5.3.0 was my sqlsrv version for php7.2), after this I installed with pear install pdo_sqlsrv-5.3.0.tgz and pear install sqlsrv-5.3.0.tgz. This time it worked for me (first time it throwed to me an error telling me that there was an installed version of pdo_sqlsrv, but I ran sudo pear uninstall pecl/pdo_sqlsrv and ran again the install order, then it worked for me). Then, I tried again to run sudo pecl install sqlsrv and sudo pecl install pdo_sqlsrv and this time it worked! After this I ran sudo phpenmod -v 7.2 sqlsrv pdo_sqlsrv and finally I finished the php7.2 sqlsrv drivers installation in my ubuntu! I tried to run again the connection to my database on sql server and it worked.

Thanks for the help!

Answer

Solution:

I updated my post with my progress solving my own question, with the help of bhucho in the comments of my post, I was able to fix my php7.2.

Looking for solutions for install the correct sqlsrv driver for my php version, I checked again the microsoft webpage to find out which sqlsrv drivers I needed to run sql queries with php7.2, and I tried again to run sudo pecl install sqlsrv and sudo pecl install pdo_sqlsrv, but it didn't worked for me. Then I found another way to install the drivers without pecl, and i ran sudo apt-get install php7.2-dev and downloaded the packages with wget http://pecl.php.net/get/sqlsrv-5.3.0.tgz and wget http://pecl.php.net/get/pdo_sqlsrv-5.3.0.tgz (5.3.0 was my sqlsrv version for php7.2), after this I installed with pear install pdo_sqlsrv-5.3.0.tgz and pear install sqlsrv-5.3.0.tgz. This time it worked for me (first time it throwed to me an error telling me that there was an installed version of pdo_sqlsrv, but I ran sudo pear uninstall pecl/pdo_sqlsrv and ran again the install order, then it worked for me). Then, I tried again to run sudo pecl install sqlsrv and sudo pecl install pdo_sqlsrv and this time it worked! After this I ran sudo phpenmod -v 7.2 sqlsrv pdo_sqlsrv and finally I finished the php7.2 sqlsrv drivers installation in my ubuntu! I tried to run again the connection to my database on sql server and it worked.

Thank you all for the help!

Source