必须先验证PHP环境,否则Workerman无法启动;运行curl -Ss http://www.workerman.net/check.php | php检查PHP版本≥5.3.3、pcntl和posix扩展是否加载,任一fail即失败;该脚本不检测event/libevent扩展缺失、disable_functions禁用关键函数及ZTS模式问题,需手动补查php -m、php -i和stream_socket_server可用性。

Workerman安装后必须先验证PHP环境,否则启动必然失败——不是“可能报错”,而是根本跑不起来。
用官方检测脚本一键判断是否满足基础要求
WorkerMan 官方提供了一个轻量级在线检测脚本,它会检查 PHP 版本、pcntl/posix 扩展是否加载、关键函数是否被禁用。直接在终端执行:
curl -Ss http://www.workerman.net/check.php | php
输出中每行末尾应为 [OK],且至少包含以下三项:
-
PHP Version >= 5.3.3(实际建议 ≥7.4,尤其 v5+ 需 fiber 支持) Extension pcntl checkExtension posix check
只要有一项是 [fail] 或提示 Function xxx may be disabled,就别急着写代码,先修环境。
立即学习“PHP免费学习笔记(深入)”;
为什么 check.php 显示 OK 还可能启动失败
这个脚本不检测两个关键点,但它们恰恰是生产环境最常翻车的地方:
-
event或libevent扩展缺失:脚本不报错,但并发 >1024 时连接大量堆积、CPU 疯涨、connections命令无响应 -
disable_functions里禁了stream_socket_server、pcntl_fork、shell_exec:脚本能过,但php start.php start直接静默退出或报Segmentation fault - PHP 是 ZTS(线程安全)模式:
php -i | grep "thread safety"输出enabled就是 ZTS,会导致pcntl_fork()崩溃,必须换 NTS 版本 PHP
手动验证核心扩展和函数是否真可用
别只信 check.php 的输出,补几条命令确认真实状态:
- 查扩展是否加载:
php -m | grep -E "pcntl|posix|sockets|event"(sockets虽未在脚本里显式检查,但stream_socket_server依赖它) - 查禁用函数:
php -i | grep disable_functions,重点看输出里有没有stream_socket_server、pcntl_fork、posix_setsid - 查监听能力是否被系统限制:
php -r "var_dump(stream_socket_server('tcp://0.0.0.0:2345', \$e, \$c));"—— 如果返回false且$e是Permission denied,说明 SELinux 或防火墙拦了,不是 PHP 问题
真正卡住人的从来不是“怎么装”,而是“以为装好了”。环境检测这一步漏掉任意一个点,后面所有调试都在原地打转。



















