
当php -v显示PHP 8.1而phpinfo()仍显示8.0时,说明命令行(CLI)与Apache服务器加载的PHP模块版本未同步——需分别配置update-alternatives和Apache模块启用状态,并确保所有PHP关联二进制文件(如phar)版本一致。
当`php -v`显示php 8.1而`phpinfo()`仍显示8.0时,说明命令行(cli)与apache服务器加载的php模块版本未同步——需分别配置`update-alternatives`和apache模块启用状态,并确保所有php关联二进制文件(如`phar`)版本一致。
在Ubuntu系统中,PHP CLI(命令行接口)与Apache SAPI(Server API)是完全独立的执行环境:CLI由/usr/bin/php符号链接控制,而Apache通过动态加载的libapache2-mod-phpX.Y模块运行,二者互不影响。因此,仅运行sudo update-alternatives --config php只能切换CLI版本,对phpinfo()毫无作用——这正是你遇到问题的根本原因。
✅ 正确解决步骤(以切换至PHP 8.1为例)
1. 确认已安装目标PHP版本及对应Apache模块
首先验证PHP 8.1及其Apache模块是否已就绪:
# 检查已安装的PHP版本(含CLI与模块) ls /usr/bin/php* # 如:/usr/bin/php8.1, /usr/bin/php8.0 ls /usr/lib/apache2/modules/libphp* # 如:libphp8.1.so # 检查可用的Apache PHP模块 ls /etc/apache2/mods-available/php* # 应看到:php8.0.load、php8.1.load 等
⚠️ 若无php8.1.load,需先安装模块:
sudo apt install libapache2-mod-php8.1
2. 切换CLI版本(可选,但推荐统一)
使用update-alternatives设置全局CLI默认版本:
立即学习“PHP免费学习笔记(深入)”;
sudo update-alternatives --config php sudo update-alternatives --config phar sudo update-alternatives --config phar.phar
选择对应php8.1的路径(如/usr/bin/php8.1),确保三者版本严格一致。
3. 关键:切换Apache加载的PHP模块
这才是影响phpinfo()的核心操作:
# 禁用旧版本模块(如当前生效的是8.0) sudo a2dismod php8.0 # 启用目标版本模块(8.1) sudo a2enmod php8.1 # 验证启用状态 ls /etc/apache2/mods-enabled/ | grep php # 应仅显示 php8.1.load
4. 重启服务并验证
sudo systemctl restart apache2 # CLI验证 php -v # 应显示 8.1.x # Web端验证:创建测试文件 echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/phpinfo.php # 浏览器访问 http://localhost/phpinfo.php # 查看 "Loaded Configuration File" 和 "PHP Version" 字段
? 常见陷阱与排查建议
- 模块冲突:Ubuntu不允许同时启用多个phpX.Y模块。若a2enmod php8.1报错“Module php8.1 already enabled”,请先a2dismod php8.0再重试。
- 配置残留:检查/etc/apache2/mods-enabled/dir.conf,确认DirectoryIndex包含index.php;否则.php文件可能被忽略。
- FPM干扰:若你使用php-fpm而非libapache2-mod-php,则a2enmod无效!应配置ProxyPassMatch并重启php8.1-fpm服务。
- 权限验证:phpinfo()由www-data用户执行,务必用sudo -u www-data php -v验证Web进程实际调用的PHP路径。
✅ 最终验证清单
| 检查项 | 命令/方法 | 期望结果 |
|---|---|---|
| CLI版本 | php -v | PHP 8.1.x (cli) |
| Web版本 | sudo -u www-data php -v | 同上(证明SAPI一致) |
| Apache模块 | apache2ctl -M \| grep php | php8_module (shared) |
| phpinfo()输出 | 浏览器访问phpinfo.php | “PHP Version”与“Server API”字段均为8.1.x |
完成上述步骤后,CLI与Web端PHP版本将彻底统一。这种分离式设计虽增加配置复杂度,却保障了环境隔离性与部署灵活性——尤其在多项目共存、灰度发布等场景中至关重要。



















