FrankenPHP启动报端口被占用需先查PID:管理员运行netstat -ano | findstr :80或:443,若PID=4则禁用W3SVC等系统服务;否则可终止对应进程或改frankenphp serve --addr :8080等配置。

查谁在占 80 端口(必须管理员权限)
FrankenPHP 启动失败时控制台只报“端口被占用”,不给 PID,得自己查。打开管理员命令提示符,执行:netstat -ano | findstr :80。
如果没输出,再试:netstat -ano | findstr :443。
看到类似 TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4 这样的行,末尾的 4 就是 PID。
PID = 4 不能 kill,得停系统服务
若 PID 是 4 或进程名显示 System,基本是 Windows 内核 HTTP.sys 驱动在托管 80/443,绝对不要 执行 taskkill /f /pid 4——会导致蓝屏或网络中断。
正确做法是:
• 按 Win+R 输入 services.msc 回车
• 找到并停止以下服务(右键 → 停止):
World Wide Web Publishing Service (W3SVC)
SQL Server Reporting Services
Web Deployment Agent Service
• 停止后双击进属性,把「启动类型」全改成「禁用」
改 FrankenPHP 监听端口(最稳妥通用方案)
改端口比折腾系统服务更快、更安全,且适用于所有场景:
立即学习“PHP免费学习笔记(深入)”;
- 用命令启动:加
--addr :8080,例如frankenphp serve --addr :8080 - 用
frankenphp.yaml配置:确保有server: { addr: ":8080" } - Docker 场景:检查
docker run -p 8080:80是否写反了,应为-p 8080:8080并同步改配置里的addr - 前端代码里硬写的
http://localhost得改成http://localhost:8080,否则请求仍发向 80
验证失败原因要看 error.log,不是控制台
FrankenPHP 启动失败时控制台输出极简,真正线索在日志里。找到 error.log(通常在项目根目录或 var/log/ 下),看末尾几行是否有明确 socket 绑定失败信息,比如:failed to listen on 127.0.0.1:80: address already in use。
这个日志能确认是不是真端口冲突,还是配置语法错误、路径权限问题等其他干扰项。



















