根本原因是PHP CLI环境未启用cURL扩展或SSL证书路径未配置;需先运行php -m | findstr curl确认启用,再下载cacert.pem并配置php.ini中curl.cainfo指向其路径。

安装 Symfony 时卡在下载阶段、报 cURL error 60 或直接提示 “The requested PHP extension curl is missing”,根本原因不是网络慢或 Composer 不行,而是 PHP 命令行环境里 cURL 扩展压根没启用,或者启用了但 SSL 证书链不认。这两类问题常被混为一谈,但解决路径完全不同。
确认 cURL 扩展是否真的加载了
很多人只检查 Apache 或 Nginx 下的 PHP 是否开了 cURL,却忘了 Composer 和 php -r 命令走的是 CLI(命令行)版本的 PHP,它可能用的是另一份 php.ini。
- 运行
php -v确认当前 CLI 使用的 PHP 版本 - 运行
php --ini查看 CLI 加载的是哪个 php.ini 文件 - 运行
php -m | findstr curl(Windows)或php -m | grep curl(macOS/Linux),有输出curl才算真正启用 - 如果没输出,打开上一步查到的 php.ini,找到
;extension=curl这一行,删掉前面的分号;保存后重试
即使 cURL 已启用,仍报 “unable to get local issuer certificate”
这说明 cURL 能发请求,但拒绝验证 HTTPS 证书——因为 PHP 不知道该信任哪些根证书。Composer 下载包、Symfony 安装器拉骨架、甚至 symfony new 都会因此中断。
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
- 去 https://www.php.cn/link/cd6a3674478af373087f891eeb390100 下载最新
cacert.pem文件 - 把它存到一个纯英文路径下,比如
D:\php\cacert.pem(避免中文、空格、特殊符号) - 在 CLI 对应的 php.ini 末尾添加:
curl.cainfo = "D:/php/cacert.pem"(正斜杠更稳妥,双反斜杠也可) - 重启终端,运行
php -r "print_r(openssl_get_cert_locations());",确认cafile值已更新为你刚设的路径
别忽略 intl 和 mbstring 这些“配角”扩展
cURL 缺失只是表象,很多情况下你修复了 cURL,紧接着就遇到 Class 'Symfony\Component\Intl\Intl' not found 或 mbstring extension is required。它们虽不直接导致下载失败,但会让 composer create-project 创建完项目后立即崩溃,等于白装。
- 必须同时启用:
intl、mbstring、xml、json、pdo、openssl - 验证方式:
php -m | findstr "intl mbstring xml json pdo openssl"(Windows) - 若缺
intl,又不想重装 PHP,可临时用composer require symfony/polyfill-intl-icu补位,但仅限开发调试,上线仍建议启用原生扩展
换镜像源能绕过部分网络问题,但治不了扩展缺失
国内用户常因 Packagist 访问慢误以为是 cURL 问题,其实只要 cURL 和证书配置正确,哪怕网速再慢也只是耗时,不会报错。但如果已经确定扩展和证书都没问题,还是频繁超时或 403,可以临时切阿里云镜像:
- 全局设置:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 项目内设置(推荐):
composer config repo.packagist composer https://mirrors.aliyun.com/composer/ - 注意:镜像只加速包下载,不解决
curl extension missing或SSL certificate problem这类底层环境问题

















