需分CLI和Web环境交叉验证PHP8扩展:用php -m查CLI加载,对比各php.ini路径并确认extension启用,通过phpinfo()网页确认Web实际状态,最后用function_exists()测试关键函数是否可用。

Ubuntu安装PHP8后验证扩展是否全部正常加载,不能只看php -v或单靠一个命令。CLI环境和Web环境(如Apache或Nginx+PHP-FPM)可能使用不同配置、不同php.ini、甚至不同扩展集,必须分场景交叉验证。
一、用php -m快速检查CLI已加载扩展
这是最直接的入口命令,列出当前PHP CLI模式下所有已成功加载的扩展(含内置和动态模块):
- 运行
php -m,观察输出中是否有curl、mbstring、json、pdo_mysql、openssl等常用扩展名称 - 筛选关键项:
php -m | grep -E '^(curl|mbstring|json|pdo|openssl|mysqli|xml)$' - 若发现缺失(如无
mysqli),说明对应扩展包未安装或未启用,需执行sudo apt install php8.x-mysqli(x替换为实际版本号,如8.2)
二、确认CLI与Web使用同一套配置
很多人忽略这点:CLI用的是/etc/php/8.x/cli/php.ini,而Apache用的是/etc/php/8.x/apache2/php.ini,Nginx+PHP-FPM则用/etc/php/8.x/fpm/php.ini。配置不一致会导致扩展在Web中“消失”。
- 查CLI生效配置:
php --ini或php -i | grep "Loaded Configuration File" - 查Web(Apache)生效配置:创建
/var/www/html/info.php,内容为<?php phpinfo(); ?>,浏览器访问后搜索“Loaded Configuration File” - 对比两处路径是否一致;若不一致,需分别检查各自
php.ini中extension=xxx行是否取消注释,且.so文件真实存在(如/usr/lib/php/20220829/mysqli.so)
三、用phpinfo()验证Web环境真实状态
这是唯一能反映Web服务器实际调用情况的方式,比任何命令行都权威:
立即学习“PHP免费学习笔记(深入)”;
- 把
info.php放入Web根目录(如/var/www/html/),通过http://localhost/info.php访问 - 页面内按
Ctrl+F搜索扩展名,例如输入mysqli,应看到“mysqli support => enabled”及客户端版本信息 - 滚动到页面底部,查看“Server API”字段:显示
Apache 2.0 Handler或FPM/FastCGI才表示Web集成正确;若显示CLI,说明该页面被当脚本执行而非经Web服务器解析
四、函数级验证——防止“加载但不可用”
有些扩展虽列在php -m中,却因依赖缺失(如libmysqlclient未安装)、权限问题或初始化失败导致函数无法调用。必须测试核心函数是否存在:
-
php -r "var_dump(function_exists('mysqli_connect'));"→ 应输出bool(true) php -r "var_dump(function_exists('curl_init'));"php -r "var_dump(function_exists('mb_strlen'));"- 也可写成PHP脚本验证:
<?php echo extension_loaded('gd') ? 'GD OK' : 'GD missing'; ?>



















