卸载 FrankenPHP v1.2.0 需先确认安装方式:用 which frankenphp 和 file $(which frankenphp) 判断是 GitHub 二进制、Homebrew 或手动部署;再分别执行对应卸载步骤,并清理监听进程、quarantine 标记及运行时残留文件。

卸载 FrankenPHP v1.2.0 需先确认它是通过哪种方式安装的——GitHub Releases 下载的独立二进制、Homebrew 安装,还是手动编译部署;用错方法会残留可执行文件、监听端口或配置目录,导致后续重装失败或端口冲突。
确认安装来源
打开终端,运行:
which frankenphp
若输出为空,说明未在 PATH 中注册,大概率是直接下载的二进制;若输出类似 /opt/homebrew/bin/frankenphp 或 /usr/local/bin/frankenphp,则属于 Homebrew 或手动软链安装。
再运行:
file $(which frankenphp)
输出含 Mach-O 64-bit executable 表示是真二进制;若显示 shell script,说明当前调用的是包装脚本,需优先删脚本而非二进制。
立即学习“PHP免费学习笔记(深入)”;
卸载 GitHub Releases 下载的独立二进制
这是最常见场景:你从 https://github.com/dunglas/frankenphp/releases 下载了 frankenphp-darwin-arm64 或 frankenphp-darwin-amd64 文件,改名为 frankenphp 并放在某处(如 ~/Downloads 或 /usr/local/bin)。
第一步:查它在哪
find /usr -name frankenphp 2>/dev/null | grep -v "Permission denied"
或更直接:
ls -la ~/Downloads/frankenphp /usr/local/bin/frankenphp /opt/homebrew/bin/frankenphp 2>/dev/null
第二步:删掉可执行文件本身
sudo rm -f /usr/local/bin/frankenphp
或
rm -f ~/Downloads/frankenphp
第三步:清除可能残留的 quarantine 标记(避免下次误点又触发 Gatekeeper 弹窗)
xattr -d com.apple.quarantine /path/to/frankenphp
【注意】不要跳过这一步——即使文件已删,若曾用 Safari/Chrome 下载过同名文件,系统仍可能在新同名文件上自动加标记。
卸载 Homebrew 安装的 FrankenPHP
Homebrew 安装的 FrankenPHP 实际是通过 brew install frankenphp 编译生成的,不是预编译二进制。它不会出现在 GitHub Releases 页面,而是由 brew 自行拉源码构建。
方法一:标准卸载流程
brew uninstall frankenphp
方法二:若提示“not installed”但 which frankenphp 仍有输出,说明存在符号链接残留
brew unlink frankenphp && brew uninstall frankenphp
执行后运行:
which frankenphp
应无任何输出。若有,检查 ~/.zshrc 或 /usr/local/bin 是否有手动创建的软链接,用 rm -f 删除。
清理运行时残留
FrankenPHP 启动后会在后台常驻进程并监听端口(默认 :8000),卸载前不清理会导致新环境启动失败。
查监听进程:
lsof -P -n -i :8000
若输出含 PID 和 COMMAND=frankenphp,记下 PID,执行:
kill -15 PID
若无输出但怀疑有静默监听,补查 TCP LISTEN 状态:
sudo lsof -iTCP -sTCP:LISTEN | grep :8000
杀掉所有 frankenphp 相关进程:
pkill -f frankenphp
删掉工作目录中可能生成的 socket、PID 文件和日志(常见于项目根目录下的 var/ 或 storage/ 子目录):
rm -f ./var/run/frankenphp.pid ./var/run/php-fpm.sock



















