答案是dns解析失败、防火墙拦截443端口或镜像url配置错误导致,需先用ping和curl验证连通性,再严格按repo.packagist键名、composer类型、url末尾带/配置镜像,清缓存并排除代理与权限干扰。

报“Connection refused”或“cURL error 7”怎么办
这不是 Composer 坏了,也不是 PHP 缺扩展——php -m | grep curl 能看到就说明 cURL 没问题。根本卡在系统连通层:DNS 解不出、443 端口被拦、或镜像 URL 拼错了。
- 先跑
ping packagist.org:返回unknown host就是 DNS 失效,立刻改/etc/resolv.conf(Linux/macOS)或网络适配器设置(Windows)为8.8.8.8 - 再跑
curl -I https://mirrors.aliyun.com/composer/:卡在* Connected to是防火墙/代理拦截;卡在* TLS handshake可加环境变量CURL_IPRESOLVE=4强制走 IPv4 - 检查镜像是否真生效:
composer config -g repo.packagist输出必须是{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},少斜杠、漏composer类型、写成repos.packagist都会静默 fallback 到官方源
报“Connection timed out”或“file could not be downloaded”怎么稳住
这类错误本质是请求发出去了但没等到响应,http.timeout 参数无效——它只管 HTTP 响应头时间,不控制 DNS 或 TCP 握手。真正要动的是网络路径和重试策略。
- 优先换镜像:用
composer config -g repo.packagist composer https://packagist.laravel-china.org(同步快、故障少),比阿里云更抗抖动 - CI 环境别只加
--timeout=300:先做健康检查,比如curl -I -s -o /dev/null -w "%{http_code}" https://packagist.laravel-china.org/ | grep -q "200",失败则 sleep 10 秒重试最多 3 次 - 删掉
vendor/和composer.lock重装:部分包下载中断后 Composer 会静默跳过,导致vendor/autoload.php空或残缺,composer show报Could not find package就是这个征兆
Permission denied 写 vendor/ 或 composer.lock 怎么办
90% 不是权限不够,而是目录被 sudo 污染过——vendor/、composer.lock 或 ~/.composer 属主是 root,而你正以普通用户运行命令。
- 看报错里带路径的那一行:
file_put_contents(/path/to/vendor/autoload.php): Permission denied→ 问题就在/path/to/vendor/ - 运行
ls -ld /path/to/vendor,如果输出里是root root,就执行sudo chown -R $USER:$USER /path/to/vendor(Linux/macOS)或icacls %USERPROFILE%\AppData\Roaming\Composer /grant Users:F(Windows) - 千万别
chmod 777:治标不治本,还留安全隐患;chown才是对症下药
离线或弱网环境下怎么让 install 成功
Composer 默认每次都要连 packages.json 校验元数据,哪怕 vendor/ 和 composer.lock 全在也照样失败。不设开关,它不会自动“读本地”。
- 彻底断网前,必须设环境变量:
COMPOSER_DISABLE_NETWORK=1,否则--no-plugins或--no-scripts都拦不住网络请求 - 镜像配置必须带末尾斜杠:
https://mirrors.tuna.tsinghua.edu.cn/composer/✅,https://mirrors.tuna.tsinghua.edu.cn/composer❌(少斜杠会拼成/composerpackages.json,404) - 离线安装后记得补一记:
composer dump-autoload -o,否则自动加载映射可能没刷新
实际操作时最容易忽略的点:镜像配置的三要素(键名 repo.packagist、type 值 composer、URL 末尾斜杠)缺一不可,且 composer config -g 的效果只对当前 shell 用户生效——CI 流水线若用 www-data 或 runner 用户跑,就得用项目级配置或环境变量注入。











