端口被占用,杀死他
Warning: stream_socket_server(): Unable to connect to tcp://0.0.0.0:8787 (以一种访问权限不允许的方式做了一个访问套接字的尝试。) in E:\Home\webman\vendor\workerman\workerman\src\Worker.php on line 2460 RuntimeException: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 in E:\Home\webman\vendor\workerman\workerman\src\Worker.php:2462
这个错误表明 8787 端口已被占用,通常是因为之前的 webman 进程没有完全退出,或者有残留的 PHP 进程仍在运行。
🎯 快速解决方案
方案一:结束所有 PHP 进程(最有效)
# 以管理员身份运行 CMD,然后执行: taskkill /f /im php.exe # 如果上面命令无效,尝试强制结束所有相关进程: taskkill /f /im php-cgi.exe taskkill /f /im php-fpm.exe
方案二:查找并结束占用 8787 端口的进程
# 1. 查看占用 8787 端口的进程 PID netstat -ano | findstr :8787 # 输出示例:TCP 0.0.0.0:8787 0.0.0.0:0 LISTENING 12345 # 最后一列 12345 就是 PID # 2. 结束该进程(将 12345 替换为实际的 PID) taskkill /f /pid 12345
方案三:更换端口
修改 config/server.php:
return [ // 将 8787 改为其他未占用的端口,如 8080 'listen' => 'http://0.0.0.0:8080', // ... ];
然后重启 webman:
php start.php start
方案四:以管理员身份运行
右键点击命令提示符,选择 "以管理员身份运行",然后重新启动:
php start.php start
🔍 根本原因与预防
为什么会出现这个错误?
-
Windows 下进程未完全退出:按
Ctrl+C停止 webman 时,某些子进程可能残留。 -
端口被其他程序占用:如 8787 被 QQ、微信、迅雷等程序占用。
-
权限不足:Windows 下某些端口需要管理员权限才能绑定。
预防措施
-
使用
restart命令(推荐):php start.php restart
这会自动停止旧进程并启动新进程。
-
创建停止脚本
stop.sh:taskkill /f /im php.exe
-
使用进程管理工具:
-
使用
php start.php status查看进程状态 -
使用
php start.php stop停止所有进程(需要配置)
-
📝 完整操作步骤
# 1. 以管理员身份打开 CMD # 2. 进入项目目录 cd E:\Home\webman # 3. 强制结束所有 PHP 进程 taskkill /f /im php.exe # 4. 等待 2 秒 timeout /t 2 # 5. 重新启动 php start.php start # 6. 如果还是不行,尝试更换端口 # 修改 config/server.php 中的端口为 8788
🚨 如果还是不行
检查是否有其他程序占用了 8787 端口:
# 列出所有监听端口 netstat -ano | findstr LISTENING # 查找 8787 端口 netstat -ano | findstr 8787
如果找到其他程序(非 PHP),可以:
-
结束该程序
-
或者更换 webman 端口
重启电脑也是最后的备选方案,可以清理所有残留进程和端口占用。
执行方案一后问题应该能解决。如果还有问题,请告诉我 netstat -ano | findstr :8787 的输出结果。

