环境:os 和 apache 以及 php 和 mariadb 版本。
uname -a
Linux MiWiFi-R3-srv 4.9.0-11-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11) x86_64 GNU/Linux
sudo apachectl -v
Server version: Apache/2.4.25 (Debian)
Server built: 2019-10-13T15:43:54
php -v
PHP 7.0.33-0+deb9u6 (cli) (built: Oct 24 2019 18:50:20) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.33-0+deb9u6, Copyright (c) 1999-2017, by Zend Technologies
Run Code Online (Sandbox Code Playgroud)
使用密码登录 mariadb 并输入status:
Server: MariaDB
Server version: 10.1.41-MariaDB-0+deb9u1 Debian 9.9
Run Code Online (Sandbox Code Playgroud)
检查 php-mysql:
sudo dpkg -l php-mysql
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
ii php-mysql 1:7.0+49 all MySQL module for PHP [default]
Run Code Online (Sandbox Code Playgroud)
获取 mysql.so 库:
sudo find / -name "*mysql.so"
/usr/lib/php/20151012/pdo_mysql.so
Run Code Online (Sandbox Code Playgroud)
检查所有包含 mysql 的模块:
php -m |grep mysql
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/php_pdo_mysql.so' - /usr/lib/php/20151012/php_pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
mysqli
mysqlnd
pdo_mysql
sudo vim /etc/php/7.0/fpm/php.ini
Run Code Online (Sandbox Code Playgroud)
改写
; ... or under UNIX:
;
;extension=mysql.so
Run Code Online (Sandbox Code Playgroud)
作为
extension=mysqli.so
Run Code Online (Sandbox Code Playgroud)
或者
extension=mysqlnd.so
Run Code Online (Sandbox Code Playgroud)
或者
extension=pdo_mysql.so
Run Code Online (Sandbox Code Playgroud)
重启apache2和mariadb数据库,问题依旧,三种格式都不行,怎么解决?
pdo_mysql不一样mysql.so。mysqlPHP 7.0 中删除了旧扩展。支持的扩展名现在只有mysqli.
从那里开始,它取决于软件期望找到的内容 - 如果它需要旧mysql库,那么您将不得不使用垫片或旧 PHP 版本(即 PHP 7 之前的任何版本,例如 PHP 5.6)。
您可以使用php7-mysql-shim库或在mysql-shim库(注意,这可能会出现一个小的性能损失),提供一种透明映射一个分派到老任何调用mysql库仍然支持mysqli库。只要您php7-mysql-shim通过 composer安装并且您的项目使用 composer,它就应该自动加载。
第三种选择是通过mysql-to-mysqlirector configuration运行原始代码,但是如果这不是您自己的代码,那么将来将很难维护。
.so无法加载的文件可能是因为权限问题。确保ls -al该文件并更正任何所有权或权限问题(chmod og+r <filename>可能)。