Webman启动失败主因是pcntl或posix扩展未启用,或PHP版本低于7.4;需验证php -v≥7.4、php -m含pcntl/posix、php -i中disable_functions不包含proc_open等关键函数。

php start.php start 命令失败,大概率不是代码问题,而是 PHP 环境没配对——缺 pcntl、posix 扩展,或 PHP 版本低于 7.4,这两项不达标,服务根本起不来。
为什么 php start.php start 一执行就退出?
Webman 启动后默认以守护进程(daemon)模式运行,这依赖 pcntl 和 posix 扩展做进程控制。缺任一个,start.php 就会打印几行日志后直接退出,不会监听端口。
- 检查命令:
php -m | grep -E "pcntl|posix"—— 没输出?说明扩展没启用 - Ubuntu/Debian 用户常用
sudo phpenmod pcntl posix,但注意:CLI 和 FPM 的 php.ini 是分开的,必须确认改的是 CLI 配置(php --ini查路径) - 宝塔面板用户容易踩坑:选“极速安装”PHP,
pcntl默认不编译进去;必须选“编译安装”,且在 PHP 设置 → 禁用函数里把pcntl_fork、proc_open等从列表中删掉 - Windows 下原生命令行无法使用
pcntl,必须用 WSL2 或 Docker,别在 CMD/PowerShell 硬试
composer install 卡住或报错 memory_limit
Webman 依赖 Workerman 和大量支持包,composer install 是内存密集型操作。本地开发环境常因默认内存限制(如 128M)失败。
- 临时解决:
php -d memory_limit=-1 composer install(-1 表示不限制) - 长期建议:在
php.ini中调高memory_limit = 512M,并确保 CLI 模式生效(php --ini确认路径) - 国内网络慢?先设镜像源:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 生产部署可加
--no-dev跳过开发依赖,加快安装且减小体积
启动成功但浏览器打不开 http://localhost:8787
看到 Workerman[start.php] start in DAEMON mode 并不等于服务真在跑——端口可能被占、防火墙拦了、或监听地址不是 0.0.0.0。
- 查端口占用:
lsof -i :8787(macOS/Linux)或netstat -ano | findstr :8787(Windows) - 改监听地址:打开
config/server.php,确认'listen' => 'http://0.0.0.0:8787',而不是127.0.0.1(后者只允许本机回环访问) - 宝塔或云服务器用户:安全组/防火墙必须放行
8787端口;不要指望 Nginx 自动代理——Webman 是独立 HTTP 服务,不需要 Apache/Nginx 转发(除非你主动配反向代理) - 调试时用前台模式:
php start.php start -d,能看到实时日志和错误堆栈,比 daemon 模式直观得多
路由写了但 /hello 返回 404
Webman 的路由注册不自动扫描控制器目录,全靠 config/route.php 显式绑定。写错命名空间、类名、方法名或没加 use,都会导致 404。
立即学习“PHP免费学习笔记(深入)”;
- 控制器必须放在
app/controller/下,文件名与类名严格一致(如HelloController.php→class HelloController) -
config/route.php中要完整写命名空间:Route::get('/hello', [app\controller\HelloController::class, 'index']); - 别漏
use support\Request;,否则控制器方法参数Request $request会报错 - 修改路由或控制器后,无需重启服务——Webman 在开发模式下是热加载的(但需确保没开 opcache 或已清除)
pcntl 是否加载、8787 端口是否通、以及路由那行 app\controller\XXX::class 里有没有手抖打错斜杠或大小写。这些地方错一个,整个流程就断在看不见的地方。



















