结论是PHP CLI环境未启用ext-curl扩展:运行php -m | grep curl无输出即证实缺失,需根据系统安装php-curl包或在php.ini中启用extension=curl,且确保Composer调用的PHP路径与验证路径一致。

直接结论:不是 Composer 坏了,是 PHP CLI 环境没启用 ext-curl——95% 的情况跟网络、镜像、权限无关,先验证扩展是否存在。
php -m 里没看到 curl 就别往下试了
Composer 报 requires ext-curl,本质是调用 php -m 检查时没返回 curl。这不是“下载失败”,而是 PHP 自己拒绝承认这个扩展存在。
- 运行
php -m | grep curl,如果无输出,说明 CLI 模式下ext-curl确实没加载 - Windows 用户注意:
php --ini查 CLI 加载的php.ini路径,和浏览器里phpinfo()显示的往往不是同一个文件 - Linux/macOS 用户若用
apt/brew安装 PHP,可能需额外装php-curl包(如 Ubuntu:运行sudo apt install php-curl) - 确认
php.ini中这行没被注释:extension=curl(或extension=php_curl.dllon Windows)
composer.json 里写了 "ext-curl": "*" 却还是报错?检查位置和作用域
声明 "ext-curl": "*" 必须放在 require 或 require-dev 字段里,且不能拼错、不能多空格。
基于5000余部现行法律法规进行的高质量专业合同审查,一键输出审查意见书,并附有参考法条原文,满足专业溯源核查要求。由accurLex知法提供技术支持。 Use when users ask for 合同审查, 审查意见书, 合同风险分析, 条款审查,知法,accurLex or 站在甲方/乙方角度审查合同 through accurLex direct API. China law only, plaintext only, review mode limited to 审查意见书.
- 错误写法:
"ext-curl ": "*"(键名末尾有空格)、"ext/curl": "*"(斜杠错)、"require-dev": { "ext-curl": "*" }但你执行的是composer install --no-dev,此时require-dev内容被跳过 - 正确做法:把
"ext-curl": "*"放到require下,确保它参与生产环境校验 - 想临时绕过?用
composer install --ignore-platform-req=ext-curl,而不是--ignore-platform-reqs(后者会一并跳过 PHP 版本等关键检查)
明明 php -m 有 curl,composer install 还报错?查实际执行的 PHP 路径
常见陷阱:系统里装了多个 PHP 版本,php 命令指向一个,而 Composer 内部调用的是另一个。
- 运行
which php和php -v,再运行composer diagnose,它第一行会显示 “Checking platform settings” 并明确写出当前检测的 PHP 路径 - 如果两者不一致(比如
which php是/usr/bin/php,而composer diagnose显示/opt/homebrew/bin/php),说明 Composer 没走你预期的 PHP - 解决方法:用完整路径执行,例如
/opt/homebrew/bin/php /usr/local/bin/composer install,或重设PATH
CI/CD 或 Docker 构建中遇到 ext-curl 缺失
容器镜像常精简过度,ext-curl 不是默认内置的——哪怕基础镜像标着 “PHP 8.2-cli”。
- Alpine 镜像:需加装
curl和php-curl,例如apk add curl && docker-php-ext-install curl - Debian/Ubuntu 镜像:确保
php-curl包已apt install,且docker-php-ext-enable curl已执行 - 不要在 CI 脚本里加
--ignore-platform-req=ext-curl后就提交代码——这等于把问题留给运行时,file_get_contents或 Guzzle 会在第一次发 HTTP 请求时直接崩 - 上线前必做:
composer install --no-dev --optimize-autoloader,它会触发一次完整的平台校验
最常被忽略的一点:扩展启用后,必须重启 CLI 进程才能生效。改完 php.ini 或装完包,别只信 php -v,一定要新开终端再跑 php -m | grep curl ——否则你看到的还是旧状态。

















