我的整个网站通过浏览器完美运行。我刚刚添加了一个 cron 作业,每次运行时都会触发此错误:
PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib/php/20180731/mysqli (/usr/lib/php/20180731/mysqli: cannot open shared object file: No such file or directory), /usr/lib/php/20180731/mysqli.so (/usr/lib/php/20180731/mysqli.so: undefined symbol: mysqlnd_global_stats))
Run Code Online (Sandbox Code Playgroud)
不知道发生了什么。我已经使用浏览器和 cron 记录了 PHP 版本,结果是一样的:7.3.2-3+0~20190208150725.31+stretch~1.gbp0912bd
cron 有什么不同?我怎样才能解决这个问题?
小智 16
尝试将php.ini两者中的文件更改php/[version]/apache2为类似于以下内容:
extension=mysqlnd
extension=mysqli
Run Code Online (Sandbox Code Playgroud)
首先加载mysqlnd消除了我的 debian VM 上的错误。如果您打算在命令行运行相同的代码,您可能php/[version]/cli/php.ini也希望考虑进行更改。
我有 2 个解决方案。
解决方案一:我注意到在脚本末尾关闭mysql连接可以解决问题。
解决方案二:事实证明,/etc/php/7.3/cli/php.ini和之间存在差异/etc/php/7.3/fpm/php.ini。
第一个有这一行:
extension=mysqli
Run Code Online (Sandbox Code Playgroud)
第二个帽子这个(注意分号):
; extension=mysqli
Run Code Online (Sandbox Code Playgroud)
添加分号以/etc/php/7.3/cli/php.ini完全解决我的问题。