卸载旧版PHP前必须确认三件事:一查网站是否已全切至新版PHP;二查是否有程序硬编码旧版路径;三查php -v和which php是否仍指向待卸载版本,若是需先设新版为默认。

卸载旧版PHP前必须确认的三件事
直接点“卸载”按钮不会自动清理残留配置和扩展,反而可能让新版PHP启动失败或网站报 Class not found 错误。宝塔的“清理依赖”选项只删系统级包(如 libxml2-dev),不碰宝塔自己建的 /www/server/php/ 下的版本目录、配置文件、扩展.so文件和软链接。
- 确认当前网站和计划升级的站点是否已全部切换到新版PHP(检查网站设置里的PHP版本)
- 检查
/www/server/php/下是否有其他程序(如Typecho、WordPress插件)硬编码了旧版PHP路径(常见于定时任务脚本或自定义CLI调用) - 运行
php -v和which php看当前默认PHP是否仍指向待卸载版本——如果是,先用宝塔面板「软件商店 → PHP → 设置 → 设为默认」切走,否则卸载后php -v会直接报错
手动清理比面板“清理依赖”更关键的4类残留
宝塔卸载界面勾选“清理依赖”仅影响 apt 或 yum 安装的底层库,而PHP运行真正依赖的是宝塔自己部署的二进制和配置。以下必须手动操作:
-
/www/server/php/{版本号}/目录:直接rm -rf /www/server/php/72(示例7.2),但删前先ls -l /www/server/php/确认无正在使用的软链接指向它 -
/www/server/php/{版本号}/etc/php.ini及php-fpm.conf:这些文件即使PHP进程停了也会被宝塔缓存读取,不删可能干扰新版FPM启动 -
/www/server/php/{版本号}/bin/php被其他脚本硬引用时,删目录后需全局搜grep -r "/www/server/php/72/bin/php" /www/wwwroot/ -
/etc/init.d/php-fpm-{版本号}服务脚本:宝塔卸载后常残留,执行chkconfig --list | grep php(CentOS)或systemctl list-unit-files | grep php(Ubuntu/Debian)确认并rm -f /etc/init.d/php-fpm-72
卸载后网站502/503的真实原因和快速验证法
多数人以为卸载完就没事了,结果第二天网站全挂——大概率是Nginx的 fastcgi_pass 还指向旧版PHP-FPM socket。这不是宝塔没卸干净,而是配置未同步更新。
- 查所有站点配置:
grep -r "fastcgi_pass.*72" /www/server/panel/vhost/(把72换成你的旧版本号) - 查全局PHP-FPM监听地址:
cat /www/server/php/{新版本}/etc/php-fpm.conf | grep "listen =",确保Nginx里fastcgi_pass值与之一致(如127.0.0.1:9000或unix:/tmp/php-cgi-80.sock) - 重启顺序不能错:先
service php-fpm-{新版本} start,再service nginx reload,跳过前者直接重载Nginx必502
为什么建议保留至少一个旧版PHP目录7天
有些老旧CMS(如帝国CMS 7.5)的数据库备份脚本写死了 /www/server/php/70/bin/php 路径,卸载后定时任务 silently 失败,直到某天发现备份为空。更隐蔽的是Redis扩展或Swoole扩展编译时绑定的PHP ABI版本,删掉旧目录后,即使新版装了同名扩展,php --ri redis 也可能报 undefined symbol: zend_empty_string。
立即学习“PHP免费学习笔记(深入)”;
真要彻底清理,等所有定时任务、监控脚本、CI/CD流水线都稳定跑过一轮再说。删之前,至少 cp -r /www/server/php/72 /www/backup/php72-$(date +%F) 留个退路。



















