webman启动失败主因是pcntl或posix扩展未加载,或proc_open、pcntl_fork等函数被disable_functions禁用;需验证php≥7.4、php -m含两扩展、php -i中disable_functions不包含关键函数。

Webman 启动失败,90% 是因为 pcntl 或 posix 扩展没加载,或者 proc_open、pcntl_fork 被禁用——不是 PHP 版本低,而是底层进程控制能力被拦住了。
检查 PHP 是否真能跑 Webman
Webman 不是装上 PHP 7.4 就能动。它依赖操作系统级的进程管理能力,必须三者同时满足:
-
php -v输出 ≥ 7.4(推荐 8.1/8.2) -
php -m | grep -E "pcntl|posix"必须同时输出两行,缺一不可 -
php -i | grep disable_functions的结果里不能出现proc_open、pcntl_fork、pcntl_wait、putenv
若发现函数被禁,找到 php.ini(用 php --ini 查路径),编辑 disable_functions 行删掉上述函数,保存后新开终端验证。
为什么 composer require workerman/webman 一定不行
这条命令只会把代码下到 vendor/,但 Webman 的 start.php、app/、config/、public/ 等骨架结构根本不会生成,自动加载规则也缺失,运行时直接报 Class 'Webman\App' not found。
必须用:
composer create-project workerman/webman myapp
其中 myapp 是你的项目名,执行完会自动生成完整可运行结构。网络慢?去 GitHub Releases 下载 webman-x.x.x.zip(注意选 dist 包,不是 Source code),解压后进目录执行 composer install。
php start.php start 启动后秒退怎么办
Linux/macOS 下看不到错误就退出,基本是 fork 失败。别猜,直接加 -d 前台运行:
php start.php start -d
你会立刻看到真实报错。常见原因还有:
-
runtime/目录不可写:Linux/macOS 执行ls -ld runtime,确保当前用户有读写权限;Windows 检查文件夹是否勾了“只读” -
config/server.php中'pid_file'和'log_file'路径指向runtime/下,但对应目录不存在(如runtime/webman.pid) - 端口 8787 被占:改
config/server.php里的'listen'配置,比如改成'http://127.0.0.1:8080'
Windows 用户最容易忽略的点
别双击 start.php,也别用资源管理器打开。必须进 CMD 或 PowerShell,cd 到项目根目录,再执行:
php start.php start
否则错误全吞掉,连日志都看不到。如果 CMD 报“找不到 php”,说明 PHP 没加进系统 PATH;如果报扩展缺失,Windows 的 php.ini 通常在 C:\php\ 或 C:\xampp\php\ 下,确认 extension=php_pcntl.dll 和 extension=php_posix.dll 已取消注释(注意:部分 Windows PHP 发行版根本不带这两个 DLL,建议改用 WSL2 或 Docker)。
真正卡住的地方往往不是语法或路由,而是 pcntl_fork() 调用失败那一刻——它不报错,只静默退出。所以永远先用 -d 启动,盯住终端第一行输出。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











