必须先停止所有php相关服务进程并清理残留文件,再 purge 卸载、手动删除源码安装路径及配置,最后换源安装php8并核对web服务器配置。

确认当前PHP是否在运行,否则删不干净
很多用户执行 sudo apt purge php* 后发现 php -v 还能显示版本,或者重启后 PHP-FPM 又自动起来了——根本原因是服务没停,文件被进程锁住,卸载时部分组件跳过或残留。
必须先查清并终止所有关联进程:
• 运行 ps aux | grep php,重点看 php-fpm、httpd(apache)、nginx(若用 FastCGI);
• 逐个停止:如 sudo systemctl stop php7.2-fpm(把 7.2 换成你实际的版本);
• 若不确定具体服务名,可用 systemctl list-units | grep php 列出全部 PHP 相关 unit;
• Apache 或 Nginx 也建议一并停掉,避免配置残留导致新版 PHP 加载失败。
包管理器卸载要“purge”而非“remove”,否则配置文件还在
debian/ubuntu 系统下,apt remove 只删二进制,php.ini、mods-available、conf.d 下的启用项全留着,装 PHP8 后可能意外加载旧扩展或冲突配置。
务必用:
• sudo apt purge php*(注意反斜杠转义,防止 shell 展开);
• 接着 sudo apt autoremove && sudo apt autoclean 清理依赖和缓存;
• 手动检查残留目录:ls -la /etc/php/ —— 如果还有 7.2 或 7.4 文件夹,直接 sudo rm -rf /etc/php/7.2;
• 别漏掉日志和运行时数据:sudo rm -rf /var/log/php* /var/lib/php/* /var/run/php*。
源码安装的PHP不能靠包管理器删,得手动清路径+软链
如果你当初是 ./configure --prefix=/usr/local/php7 编译安装的,apt purge 完全无效,它根本不知道这个路径存在。
必须人工定位并清理:
• 查真实路径:which php → 若返回 /usr/local/php7/bin/php,说明前缀是 /usr/local/php7;
• 删除整个安装目录:sudo rm -rf /usr/local/php7;
• 清掉全局软链:sudo rm -f /usr/bin/php /usr/bin/phpize /usr/bin/php-config;
• 检查 /etc/profile 和 ~/.bashrc,删掉类似 export PATH="/usr/local/php7/bin:$PATH" 的行;
• 最后 source ~/.bashrc 并验证 php -v 报错才真正干净。
装PHP8前别急着 yum/apt install,先确认仓库和模块兼容性
centos 7 默认源没有 PHP8,Ubuntu 20.04 默认只有 PHP7.4,硬装会失败或降级到旧版。
关键动作不是“装”,而是“换源”:
• Ubuntu:加 ondrej/php PPA(sudo add-apt-repository ppa:ondrej/php && sudo apt update);
• CentOS/RHEL 7:启 remi-php80(sudo yum-config-manager --enable remi-php80),别只装 php,要明确装 php-cli php-fpm php-mysqlnd php-opcache 等核心模块;
• 注意扩展命名变化:PHP8 废弃了 mysql 扩展,mysqli 和 pdo_mysql 是默认替代,旧 php.ini 里注释掉的 extension=mysql.so 如果没删,启动时会报 Warning;
• 装完立刻跑 php -m | grep -E "(mysqli|opcache)",确认关键模块已加载。
立即学习“PHP免费学习笔记(深入)”;
最容易被忽略的是 Web 服务器配置衔接——Nginx 的 fastcgi_pass 地址、Apache 的 libphp.so 路径、PHP-FPM 的 www.conf 中的 listen 端口,这些不会随 PHP 升级自动更新,必须手动核对。升级不是“卸了再装”,而是“断连→清空→重建连接”。