卸载PHP需先确认来源:macOS自带不可删,Homebrew用brew uninstall php,phpbrew/asdf需用对应工具;卸载后须清理PATH、配置文件及后台进程,并验证CLI与Web环境。

确认当前 PHP 是系统自带还是第三方安装的
不同来源的 PHP 卸载方式完全不同,混用会导致残留或冲突。macOS 自带 PHP(已弃用)不能直接删,Homebrew 安装的得用 brew uninstall php,而通过 phpbrew 或 asdf 管理的则必须走对应工具卸载。
- 查来源:运行
which php和php -v,再看php --ini输出的配置路径——如果Loaded Configuration File在/etc/php.ini或/usr/local/etc/php/下,大概率是 Homebrew;若在/System/Library/...,就是 macOS 自带(不建议动) - 别直接
rm -rfPHP 目录,尤其/usr/bin/php是系统符号链接,删了可能影响 Xcode 命令行工具或系统脚本 - Homebrew 用户执行
brew unlink php再brew uninstall php,否则只删二进制,php.ini和扩展仍留着
清理环境变量和 shell 配置里的 PHP 路径
卸载后终端还显示旧 PHP 版本?八成是 PATH 里残留了旧路径,或者 shell 启动文件(如 ~/.zshrc)里硬写了 export PATH="/usr/local/bin:$PATH" 这类语句,而 /usr/local/bin 里还有旧 php 符号链接。
- 检查:
echo $PATH看有没有可疑路径;用type -a php列出所有可执行位置 - 搜配置文件:
grep -n "php\|PATH" ~/.zshrc ~/.zprofile ~/.bash_profile 2>/dev/null - 删掉类似
export PATH="/opt/homebrew/bin:$PATH"(但保留 Homebrew 主路径)、或export PATH="/Users/xxx/.phpbrew/bin:$PATH"这种绑定路径 - 改完记得
source ~/.zshrc,再开新终端验证which php是否为空或指向新环境
切换到其他环境前先关掉依赖 PHP 的服务
很多本地开发环境(如 Laravel Valet、MAMP、XAMPP)会后台常驻 PHP-FPM 进程,即使你卸载了 PHP,这些服务仍可能试图拉起旧二进制,导致端口占用、502 错误或 command not found 报错却找不到原因。
- Valet 用户必须先运行
valet stop,再valet uninstall(否则php-fpm进程还在跑) - MAMP/XAMPP 直接点界面「Stop Servers」,别只关窗口;macOS 上还要检查 Activity Monitor 里有没有残留的
httpd或php-fpm进程 - Docker 用户注意:如果
docker-compose.yml里指定了image: php:8.1,那宿主机 PHP 卸不卸载其实不影响容器内运行——但本地 CLI 命令(如composer)会失败,需确认composer是容器内调用还是宿主机调用
验证新环境是否真正接管 PHP CLI 和 Web SAPI
装完新环境(比如 asdf install php 8.3.6),光看 php -v 不够,CLI 和 Web 请求走的是两套加载逻辑,常见坑是 CLI 用新版本,但 Apache/Nginx 还连着旧 libphp.so 或 socket。
立即学习“PHP免费学习笔记(深入)”;
- CLI 验证:
php -v+php -m | grep opcache(确认扩展加载正常) - Web 验证:建个
info.php放 Web 根目录,内容为,重点核对Loaded Configuration File和Server API行 - 如果 Web 显示旧版本,Apache 用户检查
httpd.conf里有没有LoadModule php_module指向旧路径;Nginx 用户检查fastcgi_pass是不是还连着127.0.0.1:9000(旧 PHP-FPM)而不是新 socket 路径 - Mac 用户特别注意 Rosetta 兼容性:Apple Silicon 上用 Intel 版 Homebrew 装的 PHP,可能和 ARM 版 Node 或 Python 扩展不兼容,
php -i | grep arch可查架构
最麻烦的往往不是卸载本身,而是各种隐式依赖——比如某个全局 npm 包(laravel-vite-plugin)内部调用了 php -r,或者 IDE(PhpStorm)的 CLI 解释器路径没手动更新,看着环境换了,实际跑的还是硬盘角落里一个没人记得的 /usr/local/php-7.4/bin/php。











