Workerman启动失败因PHP禁用了stream_socket_server函数,需修改CLI模式下的php.ini文件,删除disable_functions中的该函数,重启PHP服务后验证函数存在且Workerman可正常启动。

Workerman启动时提示“stream_socket_server() has been disabled for security reasons”,说明PHP环境主动禁用了这个关键socket函数,服务根本无法初始化监听,必须解除禁用才能继续。
确认当前PHP配置文件位置
运行 php --ini 命令,查看Loaded Configuration File路径,这是CLI模式下实际生效的php.ini文件。注意:Web服务器(如Nginx+php-fpm)可能使用另一个php.ini,但Workerman通常由命令行启动,所以必须改这个文件。
【务必确认是CLI环境对应的php.ini,不是Apache或fpm的配置文件】
定位并编辑disable_functions项
用文本编辑器打开上一步得到的php.ini文件,搜索 disable_functions。
找到类似这一行:disable_functions = exec,passthru,shell_exec,system,proc_open,popen,stream_socket_server
把其中的 stream_socket_server 从列表中彻底删除——注意逗号分隔逻辑,删完后确保没有多余逗号或空格导致语法错误。例如删掉后应为:disable_functions = exec,passthru,shell_exec,system,proc_open,popen。
重启PHP服务使配置生效
方法一(常见于宝塔/lnmp环境):service php-fpm restart
方法二(systemd系统):sudo systemctl restart php-fpm
方法三(若用的是PHP内置Web服务器或开发环境未启用fpm):无需重启服务,但必须确保后续启动Workerman时使用的是已修改配置的PHP二进制文件,可执行 php -m | grep sockets 验证扩展是否可用。
验证是否解除成功
第一步:运行 php -r "var_dump(function_exists('stream_socket_server'));",输出 bool(true) 表示函数已可用。
第二步:尝试启动Workerman,不再报 stream_socket_server() has been disabled 错误即为成功。


















