You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP cron任务触发mysqli扩展加载失败:同版本差异问题排查修复

解决Cron运行PHP脚本时mysqli扩展加载失败的问题

这问题我之前处理过好几次,核心原因其实是CLI模式下的PHP配置和Web服务器用的不是同一个php.ini文件——哪怕你确认了PHP版本一致,两者的扩展启用状态、配置参数可能完全不同。下面是一步步的排查和解决方法:

1. 确认CLI和Web端的php.ini路径差异

首先,搞清楚CLI模式下PHP用的是哪个配置文件:

php -i | grep "Loaded Configuration File"

然后在Web端新建一个phpinfo.php文件,内容是<?php phpinfo(); ?>,访问它找到Loaded Configuration File的路径。对比这两个路径,大概率是不一样的(比如Web用的是/etc/php/7.3/fpm/php.ini,CLI用的是/etc/php/7.3/cli/php.ini)。

2. 检查CLI的php.ini中是否启用了mysqli和mysqlnd扩展

打开CLI对应的php.ini文件,做以下检查:

  • 找到extension=mysqli或者extension=mysqli.so这行,确保前面没有被注释掉(即行首没有;)。如果没有这行,手动加上。
  • 还要确保mysqlnd扩展已经启用——因为错误里的undefined symbol: mysqlnd_global_stats说明mysqli依赖的mysqlnd没有加载。找extension=mysqlnd这行,同样确保没有被注释,并且这行要放在mysqli的前面(因为mysqli依赖mysqlnd,加载顺序很重要)。

3. 验证扩展是否成功加载

修改完配置后,运行以下命令查看已加载的扩展:

php -m

在输出列表里找mysqli和mysqlnd,如果都存在,说明配置生效了。此时可以手动运行你的cron脚本,测试是否还会报错:

/usr/bin/php /path/to/your/cron/script.php

(这里建议用PHP的绝对路径,避免cron环境的PATH问题导致调用了其他版本的PHP)

4. 额外注意:cron的环境变量问题

有时候cron的环境变量和你登录shell后的不一样,比如PATH不包含PHP的路径,或者某些系统变量缺失。如果上面的步骤还没解决,可以在cron任务里明确指定PHP的绝对路径,比如把cron任务从:

* * * * * php /path/to/script.php

改成:

* * * * * /usr/bin/php /path/to/script.php

(/usr/bin/php可以通过which php命令获取)

一般来说,做完这几步就能解决CLI模式下mysqli加载失败的问题了。

内容的提问来源于stack exchange,提问作者Boriss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:07:39