Workerman通过Composer安装失败本质是环境不达标或依赖冲突,需先启用PHP CLI的pcntl/posix扩展、切换国内镜像源、用create-project初始化,并通过composer why-not定位冲突后降级/升级对应包。

Workerman通过Composer安装时卡在下载、报Dependency resolution failed、提示pcntl_fork未定义或直接跳过核心文件,本质不是包本身坏了,而是它对运行环境有硬性要求且依赖树容易被其他包锁死——你得先让PHP CLI准备好,再让Composer看清约束链。
确认PHP CLI环境是否达标
Workerman不是普通PHP库,它必须在命令行下运行,且依赖pcntl、posix等系统扩展。Windows CMD默认不支持,Mac/Linux需确认CLI模式已启用关键扩展。
执行php -m | grep -E "pcntl|posix|openssl|mbstring",缺哪个就去php.ini里解开对应extension=行的注释;若用PHP 8.1+ on Windows,必须用WSL2或Git Bash,且通过pecl install pcntl手动编译安装——官方不提供Windows DLL。
【pcntl和posix必须同时启用,否则start.php运行时会直接Fatal error】
检查PHP版本是否匹配:Workerman v4要求PHP >=7.4,v5要求>=8.0;运行php -v确认,别只看Apache模块的PHP版本。
换国内镜像源并清缓存重装
Composer默认走Packagist.org,国内访问常卡在Downloading workerman/workerman不动。
执行composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/切换阿里云镜像。
清除可能损坏的缓存:composer clear-cache。
删掉现有依赖:rm -rf vendor composer.lock(注意:这会清空所有已装包,仅限本地调试环境)。
重新安装:composer install --no-dev -o,加-o启用优化自动加载,避免后续autoload.php找不到Worker类。
定位并解决依赖冲突
报错含Conclusion: don't install workerman/workerman v4.1.0或found 2 packages with version constraints that differ,说明其他已装包锁死了Workerman兼容版本。
第一步:运行composer why-not workerman/workerman:^4.1(必须带^4.1,不能只写包名),输出会显示阻断链,例如:laravel/framework v9.52.5 requires monolog/monolog ^2.0 → monolog/monolog 2.9.0 requires workerman/workerman ^3.5——这就说明Laravel 9间接把Workerman钉死在v3.x。
第二步:根据阻断链决定动作——若想用Workerman v4,就升级Laravel到v10(composer update laravel/framework);若项目不能升Laravel,则降Workerman:composer require workerman/workerman:^3.5。
第三步:避免dev分支干扰,检查composer.json里有没有"minimum-stability": "dev",有就删掉或改成"stable",再加"prefer-stable": true。
注意:不要用--ignore-platform-reqs强行绕过,它会让Workerman装上却运行时报undefined function pcntl_fork(),问题更隐蔽。
优先用create-project而非require
直接composer require workerman/workerman容易漏掉入口文件、autoload映射或start脚本,尤其当你项目已有复杂依赖时。
方法一:全新项目用composer create-project workerman/workerman myapp,它自带start.php、Worker.php引用和完整PSR-4 autoload配置,一步到位。
方法二:已有项目想集成,改用composer create-project workerman/workerman temp && cp -r temp/{start.php,Worker.php} .,再手动调整start.php里的命名空间和路径,比硬require更可控。
方法三:若必须require,加--with-all-dependencies让Composer重算整棵树:composer require workerman/workerman:^4.1 --with-all-dependencies,但要提前git commit锁住当前状态,以防update波及无关包。
Webman启动报“Workerman不存在”怎么修
Webman是基于Workerman的框架,报这个错90%不是没装Workerman,而是autoload没注册或vendor目录残缺。
进项目根目录,运行ls vendor/workerman/workerman/Worker.php,文件不存在就说明composer install没走完,回到第二步重装。
存在但启动仍报错?打开start.php,在require_once __DIR__ . '/vendor/autoload.php';下方加一行:require_once __DIR__ . '/vendor/workerman/workerman/Worker.php';,强制引入核心类。
最后检查composer.json中autoload段是否包含Workerman映射:"autoload": { "psr-4": { "Workerman\": "vendor/workerman/workerman/" } }——没有就补上,然后运行composer dump-autoload。


















