答案是secure-http为true时composer强制拒绝http镜像源,直接抛transportexception;需改用https镜像(如https://mirrors.aliyun.com/composer/)并确保带composer类型标识,禁用secure-http仅作高危临时方案。

secure-http 为 true 但用了 HTTP 镜像源
这是最典型的 Composer\Downloader\TransportException 触发场景:你手动配置了 HTTP 协议的镜像(比如 http://packagist.phpcomposer.com),但 Composer 默认要求所有仓库必须走 HTTPS(secure-http 默认是 true)。它直接拒绝连接,不尝试降级。
解决方法不是“关掉 secure-http 就完事”,而是优先改用 HTTPS 镜像:
- 阿里云镜像应写成
https://mirrors.aliyun.com/composer/,不是http:// - PHPChina 镜像应是
https://packagist.laravel-china.org,注意协议和末尾斜杠 - 执行命令时务必带
composer类型标识:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 如果非要临时禁用安全限制(不推荐),用
composer config -g secure-http false,但后续所有包下载都暴露在中间人攻击风险下
SSL 证书验证失败(error:14090086)
现象是报错里明确出现 certificate verify failed 或 SSL3_GET_SERVER_CERTIFICATE。这不是网络不通,而是 PHP 的 OpenSSL 找不到可信根证书,或系统时间严重偏差导致证书“未生效”或“已过期”。
先确认 PHP 使用的证书路径:
php -r "print_r(openssl_get_cert_locations());"
重点关注 default_cert_file 或 ini_cafile 对应的路径(如 /etc/ssl/certs/ca-certificates.crt 或 /usr/local/etc/openssl/cert.pem)。然后:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 检查系统时间是否准确:
date,误差超过 5 分钟就可能触发证书失效判定 - 若证书文件为空或损坏,可从 curl 官方更新:
wget https://curl.se/ca/cacert.pem -O /path/to/cert.pem - Windows 下常见于 OpenSSL 扩展未正确加载证书路径,可在
php.ini中显式指定:openssl.cafile="C:\php\cacert.pem"
镜像源不可达或返回 503/超时
错误信息含 Connection timed out、HTTP/1.1 503 Service Unavailable 或反复卡在 packages.json 下载,说明镜像本身响应异常或本地网络无法抵达。
不要盲目重试,先做三件事:
- 用
curl -I https://mirrors.aliyun.com/composer/packages.json直接测试镜像连通性,看是否返回200 OK - 换一个镜像源试试,比如从阿里云切到腾讯云:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 加长超时:全局设置
composer config -g process-timeout 600(单位秒),避免小包下载被中断 - 清空缓存再试:
composer clearcache,尤其当提示package information was loaded from the local cache and may be out of date时
PHP 缺少必要扩展或 TLS 支持异常
如果报错里夹着 NoSslException 或 Failed to enable crypto,说明 PHP 根本没启用 OpenSSL,或者 cURL 编译时没带 SSL 支持。
运行 php -m | grep -E "(openssl|curl)" 确认两个扩展都存在。若缺失:
- Linux(Debian/Ubuntu):
sudo apt install php-openssl php-curl - macOS(Homebrew):
brew install openssl && pecl install channel://pecl.php.net/openssl(视 PHP 版本而定) - Windows:打开
php.ini,取消;extension=openssl和;extension=curl前的分号 - 极端情况可临时绕过 TLS(仅调试用):
composer config -g disable-tls true,但会连带触发secure-http冲突,必须同步设secure-http false
镜像源地址、证书路径、扩展状态这三项任何一个出问题,都会走到 TransportException 这个统一异常出口。它不告诉你具体哪一环断了,得靠日志片段和逐项验证来定位——尤其是 default_cert_file 路径下的文件是否存在、是否可读,这点最容易被忽略。










