答案是“connection refused”或“curl error 7”属系统连通失败,需先ping验证dns、再确认composer config -g repo.packagist输出为完整json且含正确镜像url、清缓存、排除代理与证书干扰。

报“Connection refused”或“cURL error 7”:不是 Composer 坏了,是系统连不上
这类错误说明请求压根没发出去,或者发出去后对方没响应——和 Composer 版本、PHP 扩展无关,只和网络链路有关。
- 先运行
ping packagist.org:如果返回unknown host,说明 DNS 解析失败,得换 DNS(比如设为8.8.8.8) - 运行
composer config -g repo.packagist确认是否真用了镜像;输出必须是完整 JSON,例如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},空或仍是https://packagist.org就说明没配对 - 换源后必须清缓存:
composer clear-cache,否则旧失败记录还在,重试照样走原地址 - 企业内网若走中间人代理,会静默触发连接拒绝;可临时验证:
composer config -g secure-http false+composer config -g cafile /dev/null(仅调试)
报“Permission denied”写 vendor/ 或 composer.lock:不是权限不够,是目录认错了主人
绝大多数情况不是缺 chmod,而是 vendor/、composer.lock 或 ~/.composer 被 sudo 污染过,属主是 root,而你正以普通用户运行命令。
- 报错里带路径的那一行就是线索:
file_put_contents(/path/to/vendor/autoload.php): Permission denied→ 问题在vendor/ - 立刻检查归属:
ls -ld vendor/ composer.lock $(composer config --global home) - 修复归属:
sudo chown -R $USER:$USER vendor/ composer.lock ~/.composer(别用chmod 777,那会埋安全隐患) - 宝塔环境尤其注意:你在终端用
root配的全局镜像,但实际运行的是www用户,得用sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
报“Your requirements could not be resolved”:不是网络问题,是环境不满足 lock 文件前提
这个错误说明 Composer 已经拿到所有包元数据,但在本地求解时找不到一组满足全部约束的版本组合——它不怪镜像、不怪网速,只怪约束之间打架,或本地环境达不到 composer.lock 的硬性要求。
- 运行
composer why-not php:8.3(把8.3换成你目标版本),直接看到哪个包在拦路;比如输出laravel/framework v10.42.0 requires php ^8.1,但你项目里还有个包锁死了php: ^7.4 - 检查
composer.json顶部"config": {"platform": {}}是否写死了平台版本,却和实际 PHP 版本不符(例如写"php": "8.2.10",却在 PHP 8.1 下执行) - 确认 PHP CLI 版本和扩展真实可用:
php -v和php -m | grep -E "mbstring|openssl|curl|json",别只信phpinfo()页面——Web 和 CLI 可能加载不同php.ini - 临时绕过可用
composer install --ignore-platform-reqs,但它不会修复问题,只是掩盖;上线前必须让代码真兼容目标环境
换源后仍卡在 “Loading composer repositories” 或报 SSL 错误:不是镜像挂了,是证书或缓存坏了
镜像只加速元数据和 ZIP 包拉取,不解决证书链或缓存污染问题。真实原因往往是 CA 证书过期、缓存残留或元数据损坏。
- 运行
php --ini找到真实加载的php.ini,检查openssl.cafile和curl.cainfo是否指向有效证书文件;推荐下载最新cacert.pem(从https://curl.se/ca/cacert.pem),并在php.ini中统一设置两处 - 先执行
composer clear-cache;Windows 用户还得手动删%LOCALAPPDATA%\Composer\cache - 删掉
vendor/和composer.lock——composer.lock里硬编码了旧 provider 地址,不删它,Composer 就一直重试失败路径 - 手动验证镜像可用性:
curl -I https://mirrors.aliyun.com/composer/packages.json必须返回HTTP/2 200;若返回 HTML 页面(如人机验证),说明该镜像不适合自动化场景
composer 类型参数,Composer 就安静退回 https://packagist.org,不报错也不提示——你看到的 composer config -g repo.packagist 输出,未必是它正在用的那个地址。











