提问人:DarkLlama 提问时间:6/3/2023 更新时间:6/3/2023 访问量:208
PHP:无法加载动态库“mysqlnd”:仅在 CLI 中未定义符号
PHP: Unable to load dynamic library 'mysqlnd': undefinied symbol only in CLI
问:
我无法让 mysql 相关函数在命令行中与 PHP 一起使用,在 apache Web 服务器上一切正常,甚至 PHPmyAdmin 也能完美运行。
操作系统:Debian 11
PHP版本:8.2
当我跑步时会发生什么php -v
PHP Warning: PHP Startup: Unable to load dynamic library 'mysqlnd' (tried: /usr/lib/php/20220829/mysqlnd (/usr/lib/php/20220829/mysqlnd: cannot open shared object file: No such file or directory),
/usr/lib/php/20220829/mysqlnd.so (/usr/lib/php/20220829/mysqlnd.so: undefined symbol: EVP_PKEY_CTX_new)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20220829/mysqli (/usr/lib/php/20220829/mysqli: cannot open shared object file: No such file or directory),
/usr/lib/php/20220829/mysqli.so (/usr/lib/php/20220829/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/20220829/pdo_mysql (/usr/lib/php/20220829/pdo_mysql: cannot open shared object file: No such file or directory),
/usr/lib/php/20220829/pdo_mysql.so (/usr/lib/php/20220829/pdo_mysql.so: undefined symbol: mysqlnd_get_client_info)) in Unknown on line 0
我最初的问题是没有找到mysqli类,经过调查,我发现cli的php.ini不是/etc/php/8.2/cli/php.ini我一直在编辑,而是试图在/usr/local/lib/中加载一个不存在的php.ini。一旦我解决了这个问题,上述错误就开始出现。
在 apache 脚本中运行并显示它们都是相同版本的 PHP(具有相同版本的 Zend Engine),并从同一文件夹 (/usr/lib/php/20220829) 加载扩展phpinfo();
php -i
我尝试完全卸载 PHP(最初是从源代码安装的)并重新安装它 - 同样的错误apt
也尝试过之前放入php.ini文件中,这没有区别,如果它们被注释掉也没有区别。extension=mysqlnd
extension=mysqli
答:
0赞
DarkLlama
6/3/2023
#1
感谢@Sergey92zp为我指明了正确的方向。
通过 CLI 执行 PHP 时,OpenSSL 未加载。我无法通过 apt 安装。但是我能够按源代码编译“OpenSSL.so”扩展名。之后,需要先在php.ini启用它。所以扩展顺序是:openssl > mysqlnd > mysqli > pdo_mysqlphp8.2-OpenSSL
评论
php -i |grep php\.ini