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

Webman 启动失败,八成是 pcntl 或 posix 扩展没启用,或者 proc_open、pcntl_fork 被禁用了——不是版本低,而是函数/扩展被拦在门外。
检查 PHP 是否真满足 Webman 最低要求
Webman 不是“PHP ≥ 7.4”就万事大吉。它依赖底层进程控制能力,必须同时满足三个条件:版本达标、扩展加载、函数未被禁用。
- 运行
php -v确认输出为PHP 7.4.x或更高(推荐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行,删掉上述函数,保存后重启 CLI 环境(Linux/macOS 可直接新开终端)
为什么不能用 composer require workerman/webman
composer require 只装包,不建骨架。Webman 的 start.php、app/、config/、public/ 等目录结构和自动加载规则,只在 create-project 时生成。
- 错误做法:
composer init && composer require workerman/webman→ 结果是 vendor 里有代码,但没start.php,运行报错Class 'Webman\App' not found - 正确命令:
composer create-project workerman/webman myapp(myapp是你的项目名) - 网络慢或超时?去 GitHub Releases 下载
webman-x.x.x.zip(不是 Source code),解压后进目录执行composer install - Windows 用户注意:别双击
start.php,要进 CMD 运行php start.php start,否则看不到错误输出
php start.php start 启动后秒退怎么办
常见于扩展缺失、函数被禁、或 runtime/ 目录不可写。终端没报错,只闪一下就消失,大概率是进程 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) - 如果报
pcntl_fork() has been disabled,说明上一步的disable_functions没改对,再跑一遍php -i | grep disable_functions核对
Nginx 反向代理配置要点
Webman 默认监听 http://0.0.0.0:8787,生产环境必须绑定 127.0.0.1 并用 Nginx 做前置,否则端口暴露风险极高。
- 先改
start.php:找到$worker->listen('http://0.0.0.0:8787'),改成$worker->listen('http://127.0.0.1:8787') - Nginx server 块里加反代配置:
location / { proxy_pass http://127.0.0.1:8787; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } - 别忘了
nginx -s reload重载配置,否则改了白改 - 如果访问返回 502,先确认 Webman 是否真的在运行:
ps aux | grep start.php;再检查netstat -tuln | grep :8787看端口是否被监听
最易忽略的是:宝塔用户选“极速安装”PHP,pcntl 和 posix 扩展默认不编译进去;还有人改完 php.ini 忘了重启 CLI 环境,导致 php -m 看着有扩展,实际 start.php 运行时还是报错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











