直接结论是PHP缺少ext-sockets扩展:运行php -m | grep sockets无输出即确认缺失,需检查php --ini定位CLI的php.ini并确保extension=sockets未被注释,Windows下dll须放php/ext/目录,Linux/macOS需显式安装对应版本sockets包,重启服务生效。

直接结论:不是 Composer 本身的问题,是 PHP 缺少 ext-sockets,所有依赖它(如 php-amqplib/php-amqplib、spatie/ray、laravel/reverb)的包都会卡在这里。
怎么确认 sockets 确实没启用
别猜,直接命令验证:
- 运行
php -m | grep sockets—— 没输出就代表没加载 - 运行
php --ini查看 CLI 模式实际加载的php.ini路径,别只改 Apache 或 Nginx 用的那个 - 检查该
php.ini文件里是否有extension=sockets这一行,且前面没有分号
Windows 下常见坑:dll 文件路径不对
PHP 8.0+ 内置 sockets 扩展,但旧版(如 PHP 7.2)需手动补全。问题常出在两处:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 下载的
php_sockets.dll放错了位置:必须放进php/ext/目录,不是php/根目录 - 如果还报“找不到 rabbitmq.4.dll”这类错误,说明你装的是
amqp扩展(非sockets),而它的依赖 DLL 必须放在php/根目录(和php.exe同级) - 改完
php.ini后,必须重启 CLI 终端或 Web 服务,否则php -m仍读缓存
Linux/macOS 用户别用系统自带 PHP
Homebrew 或 apt 默认装的 PHP 常阉割了 pcntl 和 sockets,尤其 macOS 自带 PHP 已弃用多年:
- macOS:用
brew install php@8.2(版本对齐项目要求),它自带完整扩展 - Ubuntu/Debian:装对应版本的扩展包,例如 PHP 8.2 就要
sudo apt install php8.2-sockets php8.2-pcntl - 别信
php-soap或php-curl包能顺带装上 sockets——它独立存在,必须显式安装
绕过检查只是临时方案,别上线用
有人会加 --ignore-platform-reqs 强行跳过,但这只会让问题延后爆发:
-
composer require spatie/ray成功了,但ray()调用静默失败(UDP 发送无响应) -
laravel/reverb安装成功,启动时报Class 'Sockets' not found或直接 segfault -
php-amqplib装上了,一连 RabbitMQ 就抛Connection refused,实际是底层 socket 初始化失败
真正要动的是 PHP 环境,不是 Composer 参数。扩展没起来,任何基于它的通信组件都只是纸老虎。

















