90%的composer install失败源于网络、权限、缓存或内存四类问题:见“Connection refused”即DNS/网络问题,需改DNS并清缓存;“Permission denied”多因属主错误,应chown而非chmod;镜像不生效常因项目级repositories覆盖全局配置;“Allowed memory size exhausted”需php -d memory_limit=-1执行。

90% 的 composer install 失败,根本不用查 Composer 版本或重装工具——直接看报错关键词,锁定是网络、权限、缓存或内存四类问题中的一种。
看到 “Connection refused” 或 “cURL error 7” 就换 DNS + 清缓存
这不是 Composer 没配置好,是系统连 packagist.org 都没发出去请求。常见于国内服务器或企业内网。
- 先运行
ping packagist.org:返回unknown host就是 DNS 解析失败,立刻改/etc/resolv.conf(Linux/macOS)或网络适配器设置(Windows),加一行nameserver 8.8.8.8 - 再确认镜像是否生效:
composer config -g repo.packagist输出必须是https://mirrors.aliyun.com/composer/(注意结尾斜杠和 HTTPS) - 换源后不
composer clear-cache,旧失败记录还在,重试照样走原地址 - CI/CD 环境里,
root配的镜像对www用户无效,得用sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
报 “Permission denied” 别急着 chmod,先 chown
错误行里带路径(比如 file_put_contents(/path/to/vendor/autoload.php): Permission denied),说明目标目录归属错了,不是权限不够。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 运行
ls -ld vendor/ composer.lock ~/.composer,如果属主是root,而你当前是普通用户,就是被sudo composer install污染了 - 修复命令:
sudo chown -R $USER:$USER vendor/ composer.lock ~/.composer(macOS/Linux);Windows WSL 同理 - 千万别
chmod 777,这会破坏 Composer 自动加载机制,甚至触发安全警告 - 宝塔面板用户注意:PHP 运行用户(如
www)和你 SSH 登录用户不同,要按实际运行用户来 chown
卡在 “Downloading” 但日志没出现镜像域名?检查项目级配置覆盖
全局镜像配对了,但 composer install -vvv 日志第一行 URL 还是 packagist.org,说明它根本没走你设的镜像。
- 运行
composer install -vvv 2>&1 | head -n 10 | grep Downloading,第一行 URL 才是真实请求地址 - 检查项目根目录
composer.json是否含"repositories"字段:哪怕只是空数组[],也会完全屏蔽全局镜像 - 临时清掉项目级配置:
composer config --unset repositories(注意没-g) - 某些框架模板(如 Laravel 官方 starter)自带
repositories,初始化后记得删掉
“Allowed memory size exhausted” 不是 Composer 太重,是 PHP 限制太低
composer install 在缺 composer.lock 或需重解析依赖时,内存峰值常超 1.5GB,而 PHP CLI 默认只给 128M。
- 最稳写法:
php -d memory_limit=-1 composer install(-1表示无限制) - 别改全局
php.ini——会影响其他 CLI 工具;只针对 Composer 加参数更安全 - Docker 用户注意:
--memory=4g容器内存限制必须足够,否则 OOM killer 会直接杀进程 - 生产环境永远用
composer install(读 lock 文件),禁用composer update;所有更新必须在开发机完成并提交composer.lock
真正容易被忽略的是:错误日志里那一行带路径的报错,它既指明了问题发生位置,也暗示了作用域——是全局配置、项目配置、还是系统级资源(DNS/内存/属主)出了问题。盯住它,比翻文档快十倍。

















