msqli 和 mssql 的问题以及在 linux 上损坏的 php7.2

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

我有一个本地应用程序 laravel 5.5 在我的 ubuntu18.04.1 上使用 mysql 数据库。它托管在 php7.2 的服务器上,我的系统中有相同版本的 php。一切正常。昨天,我试图将我的应用程序连接到 SQL 服务器以从数据库中获取数据,然后我的噩梦开始了。

我按照这种格式将数据库连接信息添加到我的 laravel 应用程序中的 database.php 文件中

 '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' => '',
    ],

一切似乎都工作正常,但是当我尝试检索数据时,出现连接异常,laravel 告诉我找不到 sqlsrv 驱动程序。我想,也许 sqlsrv 扩展没有启用,所以我去 php.ini 激活它,但我没有找到它,所以我开始调查,我发现我必须从微软网页安装它。我尝试了各种方法来添加正确的 .so,我安装并卸载了 php7.2,但我不知道 php7.4 文件夹和模块在我的系统中是如何存在的。我按照这个 site(西班牙语)安装了一个 docker 并试图防止将来出现这种情况。我跟着它直到 $ sudo docker-compose up -d nginx mysql phpmyadmin 部分,然后我尝试 运行 我的应用程序并且它工作,它连接正确,但我无法通过 http://localhost:3030/ 访问 phpmyadmin,我phpMyAdmin 错误,因为它找不到 mysqli 扩展。

然后我厌倦了 运行 php -S 就像我以前 运行 当我尝试连接到 phpMyAdmin 时我得到了这个

$ 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 运行 php --ini 找到配置文件的位置并编辑 mysqli 的扩展名以启用它,现在当 y 运行 再次 php --ini 我收到这个警告

$ 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

我仍然无法访问 phpMyAdmin。当我 运行 php --version 我得到这个

$ 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

我需要尽快修复此问题以继续处理我的 laravel 应用程序,完成后,我需要一种正确的方法来安装正确的 sqlsrv 驱动程序以便能够连接我的laravel 应用到 sql 服务器数据库。

当我 运行 php -m 我得到这个

$ 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

这就是我现在安装的 php、nginx 和 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

有人知道我能做什么吗?

如果您需要更多信息,请在评论中告诉我,我会更新问题。

谢谢!

更新 1:尚无任何效果

我尝试按照此 卸载所有 php 和 php7 文件并尝试重新安装 php7.2,但我无法添加存储库当我执行 add-apt-repository ppa:ondrej/php 因为终端抛出这个

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.

我搜索了我的错误并找到了 this,但它对我不起作用。

我尝试在 之后安装 php7.2 并且一切顺利,但是当我执行 sudo service apache2 restart 时,我得到了这个

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

所以我执行了 systemctl status apache2.service 然后它抛出了这个

    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.

我现在能做什么?我无法启动 apache 服务,我不知道这里发生了什么...

更新 2:我的应用程序和 apache2 现在可以正常工作了

我更新了我的下载管理器以查找可用的存储库和宾果游戏,ondrej 存储库被锁定,我刚刚解锁它们并再次尝试添加存储库,它现在工作了。我已经使用 php7.2 运行ning sudo apt-get install apache2 并遵循 答案重新安装了 apache2。但是我遇到了同样的问题,所以我意识到错误显示了两个问题,第一个问题是缺少服务器名称,第二个是端口 80 正在使用中,这就是为什么 apache2 在尝试启动时一直失败。为了解决第一个问题,我 运行 sudo gedit /etc/apache2/apache2.conf 并添加 Server Name 127.0.0.1 保存后,第一个问题解决了,我解决了第二个问题 运行ning sudo lsof -i -n -P | grep ':80'我发现 nginx 进程正在使用它,所以我使用 sudo kill [the nginx PID] 终止 nginx 进程并重试启动 apache2,现在它工作了。我能够在 phpmyadmin 中访问我的数据库,但现在我遇到了另一个问题,当我在我的 laravel 项目中执行 php artisan serve 时,我得到了一个 PDOConnection.php 错误,因为那里是一个缺少的驱动程序,在执行 php -m 之后我意识到那是 mysql 驱动程序所以我 运行 sudo apt-get install php7.2-common php7.2-mysql php7.2-cli 最后我得到了我的 apache2 和我的 php7。 2固定!最后谢谢大家对我的帮助!

但现在我遇到了与这一切开始时相同的问题,我需要以正确的方式安装 sqlsrv .so 驱动程序才能连接我的 laravel 应用程序SQL 服务器数据库。我试图从微软页面下载 .so 文件,但这让我陷入了这场噩梦,所以有人知道我如何继续正确安装 sqlsrv 驱动程序吗?

更新三:终于解决了!

寻找解决方案,我再次检查了微软网页,找出我需要哪些 sqlsrv 驱动程序 运行 sql 查询 php7.2,以及我再次尝试 运行 sudo pecl install sqlsrvsudo pecl install pdo_sqlsrv,但它对我不起作用。然后我找到了另一种不使用 pecl 安装驱动程序的方法,我 运行 sudo apt-get install php7.2-dev 并使用 wget http://pecl.php.net/get/sqlsrv-5.3.0.tgzwget http://pecl.php.net/get/pdo_sqlsrv-5.3.0.tgz 下载了软件包(5.3.0 是我的 sqlsrv 版本 php7.2),之后我安装了 pear install pdo_sqlsrv-5.3.0.tgzpear install sqlsrv-5.3.0.tgz。这次它对我有用(第一次它向我抛出一个错误,告诉我安装了 pdo_sqlsrv 版本,但我再次 运行 sudo pear uninstall pecl/pdo_sqlsrv 和 运行安装订单,然后它对我有用)。然后,我再次尝试 运行 sudo pecl install sqlsrvsudo pecl install pdo_sqlsrv,这次成功了!在这之后我 运行 sudo phpenmod -v 7.2 sqlsrv pdo_sqlsrv 最后我在 ubuntu 中完成了 php7.2 sqlsrv 驱动程序的安装!我再次尝试 运行 连接到我在 sql 服务器上的数据库,它成功了。

感谢您的帮助!

我更新了我的 post,解决了我自己的问题,在 bhucho 在我的 post 评论中的帮助下,我能够修复我的 php7.2 .

寻找为我的 php 版本安装正确 sqlsrv 驱动程序的解决方案,我再次检查了微软网页以找出我需要哪些 sqlsrv 驱动程序 运行 sql 使用 php7.2 查询,我再次尝试 运行 sudo pecl install sqlsrvsudo pecl install pdo_sqlsrv,但它对我不起作用。然后我找到了另一种不使用 pecl 安装驱动程序的方法,我 运行 sudo apt-get install php7.2-dev 并使用 wget http://pecl.php.net/get/sqlsrv-5.3.0.tgzwget http://pecl.php.net/get/pdo_sqlsrv-5.3.0.tgz 下载了软件包(5.3.0 是我的 [=35= php7.2 的 ]srv 版本),之后我安装了 pear install pdo_sqlsrv-5.3.0.tgzpear install sqlsrv-5.3.0.tgz。这次它对我有用(第一次它向我抛出一个错误,告诉我安装了 pdo_sqlsrv 版本,但我再次 运行 sudo pear uninstall pecl/pdo_sqlsrv 和 运行安装订单,然后它对我有用)。然后,我再次尝试 运行 sudo pecl install sqlsrvsudo pecl install pdo_sqlsrv,这次成功了!在这之后我 运行 sudo phpenmod -v 7.2 sqlsrv pdo_sqlsrv 最后我在 ubuntu 中完成了 php7.2 sqlsrv 驱动程序的安装!我再次尝试 运行 连接到我在 sql 服务器上的数据库,它成功了。

谢谢大家的帮助!