Ubuntu 22.04切换PHP版本:CLI生效但Apache版本无变化的问题
问题原因及解决方法
核心原因
update-alternatives --config php 仅控制CLI命令行的PHP版本,Apache服务器的PHP版本由其加载的PHP模块(mod_php)或配置的PHP-FPM服务决定,两者属于独立的配置体系,因此CLI切换成功后浏览器端版本不会自动同步。
分场景解决步骤
场景1:Apache使用mod_php模块(传统方式)
如果你的Apache通过加载PHP模块处理PHP请求,按以下步骤操作:
- 禁用当前启用的PHP模块(以当前为php8.1为例):
sudo a2dismod php8.1 - 启用目标PHP版本的模块(以切换到php8.3为例):
sudo a2enmod php8.3 - 重启Apache服务使配置生效:
sudo systemctl restart apache2 - 验证:新建
info.php文件,内容为<?php phpinfo(); ?>,通过浏览器访问该文件,查看页面顶部的PHP版本信息。
场景2:Apache使用PHP-FPM(推荐,性能更优)
如果服务器采用PHP-FPM处理PHP请求(多数现代配置会用这种方式),按以下步骤操作:
- 确保目标版本的PHP-FPM服务正常运行(以php8.3为例):
sudo systemctl start php8.3-fpm sudo systemctl enable php8.3-fpm # 设置开机自启 - 禁用所有mod_php模块(避免冲突):
sudo a2dismod php8.1 php8.2 php8.3 - 启用Apache所需的FPM依赖模块:
sudo a2enmod proxy_fcgi setenvif - 编辑站点配置文件(路径通常为
/etc/apache2/sites-available/你的站点配置.conf),找到PHP请求处理的配置块,替换为目标版本的FPM套接字路径:
示例配置(替换成对应版本的套接字):<FilesMatch \.php$> SetHandler proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost </FilesMatch> - 验证Apache配置语法是否正确:
sudo apache2ctl configtest - 重启Apache和目标版本的FPM服务:
sudo systemctl restart apache2 php8.3-fpm - 同样通过
info.php验证浏览器端的PHP版本。
常见排查点
- 确认站点配置文件中的FPM套接字路径是否正确(不同版本的路径仅PHP版本号不同)
- 避免同时启用mod_php和PHP-FPM,会导致请求处理冲突
- 执行命令后务必重启对应服务,配置才会生效
内容的提问来源于stack exchange,提问作者Zahirabbas
相关产品推荐
相关产品推荐

