iis启动失败报“端口占用”本质是绑定端口(如80/443)被其他进程或http.sys url保留抢占,php本身不监听端口;需用netstat查pid、tasklist定位进程,针对性处理skype/svchost/system占用,或改iis绑定端口绕过。

Windows IIS10 使用 PHP8.1.30 时报“端口占用”,本质不是 PHP 占了端口,而是 IIS 启动网站时,其绑定的端口(通常是 80 或 443)已被其他进程抢先监听。PHP 本身不监听端口,它通过 FastCGI 由 IIS 调用——所以问题出在 IIS 的 HTTP 监听层,而非 PHP 配置。
确认 IIS 实际要绑哪个端口
IIS 网站默认绑定 http://*:80,若该端口被占,整个站点就无法启动,报错如“另一个站点可能已在使用该端口”。操作路径:
- 打开 IIS 管理器 → 左侧选中你的网站 → 右侧点击“绑定…” → 查看“端口”列值(常见为 80、8080、443)
- 记下这个端口号,后续所有排查都围绕它展开,不要默认只查 80
查清谁在抢这个端口
必须以管理员身份运行命令提示符或 PowerShell,执行以下组合命令:
- netstat -ano | findstr :80(把 80 换成你实际绑定的端口)→ 找到 LISTENING 行末尾的 PID
-
tasklist | findstr "1234"(1234 替换为上一步 PID)→ 看进程名,重点关注:
• System(常对应 HTTP.sys 内核驱动,非普通进程)
• svchost.exe(可能托管 World Wide Web Publishing Service、SQL Server Reporting Services)
• Skype.exe、TeamViewer.exe、nginx.exe、java.exe
针对性处理占用源
不能一概 kill,要区分对待:
- 如果是 Skype、TeamViewer、旧版 QQ 等应用:直接关闭软件,或进其设置里关掉“使用 80/443 端口”选项
-
如果是 svchost 托管的服务:按 Win+R 输入 services.msc → 找到并双击:
• World Wide Web Publishing Service(IIS 核心服务,若你不用其他 IIS 站点可禁用)
• SQL Server Reporting Services(SQL Server 附带,非必需可设为手动) -
如果是 System(PID 4)且端口为 80/443:大概率是 HTTP.sys 占用了 URL 保留,运行:
netsh http show urlacl → 若看到http://+:80/或http://+:443/条目,说明有服务注册了全站监听权
可临时清除:netsh http delete urlacl url=http://+:80/(需管理员权限,慎用)
快速绕过,改端口最稳妥
不想动系统服务?直接让 IIS 网站换端口,5 分钟生效:
- IIS 管理器 → 网站 → “绑定…” → 编辑原有绑定 → 把端口从 80 改为 8080(或其他未被占用的,如 8000、8081)
- 保存后右键重启网站
- 浏览器访问 http://localhost:8080/test.php(注意带端口号)验证 phpinfo 是否正常
- 后续开发统一用新端口,避免冲突反复发生
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











