必须先确认php安装方式再卸载:通过dpkg/rpm/brew/which+php--ini判断来源;系统包管理器用purge/remove+autoremove,homebrew用unlink+uninstall,源码安装优先make uninstall或手动清理;卸载后需清配置、验证path、进程、web服务器配置及扩展残留。

确认当前 PHP 版本和安装方式
直接运行 php -v 只能告诉你版本号,但卸载前必须知道它是怎么装的——源码编译、系统包管理器(apt/yum/dnf)、或第三方仓库(如 Ondřej Surý 的 PPA、Remi、Homebrew)。不同来源的卸载方式完全不同,混用会导致残留或冲突。
查安装来源的方法:
- Debian/Ubuntu:
dpkg -l | grep php或apt list --installed | grep php - RHEL/CentOS/Fedora:
rpm -qa | grep php - macOS(Homebrew):
brew list | grep php - 源码编译安装(常见于
/usr/local/bin/php):which php+php --ini看配置路径,再检查make uninstall是否可用(多数情况不可用)
用系统包管理器彻底卸载(推荐优先走这条路)
如果 PHP 是通过 apt、yum 或 dnf 安装的,别手动删文件。否则会留下配置、模块、服务单元等碎片,后续新版本可能因旧配置报错(比如 PHP Warning: Module 'xxx' already loaded)。
操作要点:
立即学习“PHP免费学习笔记(深入)”;
- Ubuntu/Debian:
sudo apt purge $(dpkg -l | grep '^ii.*php' | awk '{print $2}') && sudo apt autoremove(注意加purge,不是remove) - CentOS 7:
sudo yum remove php\* && sudo yum autoremove - Fedora:
sudo dnf remove php\* && sudo dnf autoremove - 卸载后务必清空配置残留:
sudo rm -rf /etc/php* /var/lib/php*(某些发行版不会自动删这些)
Homebrew 或源码安装的清理要点
Homebrew 和源码安装不走系统包管理器,卸载逻辑不同。尤其 Homebrew,直接 rm -rf 会破坏 brew 的数据库,导致后续 brew doctor 报错。
正确做法:
- Homebrew:
brew unlink php@8.1(换成你实际安装的版本),再brew uninstall php@8.1;若装了多个版本,逐个执行,别用通配符 - 源码安装:如果你还留着原编译目录,且当时执行过
make install,可尝试sudo make uninstall(但很多 configure 脚本不支持该目标);更稳妥的是手动删:sudo rm -f /usr/local/bin/php* /usr/local/lib/php* /usr/local/etc/php*,然后检查echo $PATH是否仍含/usr/local/bin,必要时临时从 shell 配置中注释掉 - 无论哪种方式,都要检查
php --ini输出的配置文件路径是否还存在,以及ls -la $(which php)确认二进制文件已被移除
卸载后验证与环境重置
卸载完成不等于环境干净。常见陷阱是 PATH 缓存、shell 别名、或旧的 php-fpm 服务仍在运行,导致你以为卸载成功,其实只是新命令没生效。
关键验证步骤:
- 新开终端或运行
hash -r(清除 shell 命令缓存),再输php -v—— 应报command not found - 检查进程:
ps aux | grep php,确保没有残留的php-fpm或httpd加载旧模块 - Apache/Nginx 用户:确认
LoadModule php_module或fastcgi_pass指向的不是旧libphp.so或 socket 路径 - 最后一步再装新版前,建议运行
which php、php --ini、php -m三连查,确认无输出或报错
最易被忽略的是旧扩展的 .so 文件残留在 /usr/lib/php/*/ 或 /usr/local/lib/php/extensions/ 下,新版本启动时可能因 ABI 不兼容直接 segfault。动手前先备份再删,比重装系统快。











