卡住不一定是网络问题,先确认vendor/和composer.lock是否可写;执行ls -ld vendor/、ls -ld composer.lock、ls -ld $(composer config --global cache-dir)查属主,非当前用户则用sudo chown -r $user:$user修复归属,禁用chmod -r 777。

卡住不一定是网络问题,先确认 vendor/ 和 composer.lock 是否可写
“Loading composer repositories”卡住时,90% 的人直接去换镜像或调 DNS,但实际日志停在这一行,vendor/ 或 composer.lock 写不进去也会表现为“卡住”——因为 Composer 在尝试生成临时缓存、写入 lock 文件或初始化 autoload 前就失败了,根本没走到网络请求那步。
执行这三行命令,看输出第三列(属主)是否为你当前用户名:
ls -ld vendor/ls -ld composer.lockls -ld $(composer config --global cache-dir)
任意一行显示 root root、www-data www-data 或其他非你用户名,就说明权限归属错误。此时不是改 rwx 位,而是要归还所有权。
用 chown 修复归属,别碰 chmod -R 777
chmod -R 777 不仅无效,还会让 CI 工具拒绝提交、Git 报 ownership changed、后续 composer update 半途失败。真正该做的是:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 修复项目内目录:
sudo chown -R $USER:$USER vendor/ composer.lock - 修复全局缓存:
sudo chown -R $USER:$USER $(composer config --global cache-dir) - 如果整个
~/.composer都是 root 的:sudo chown -R $USER:$USER ~/.composer,再补一句chmod -R u+rw ~/.composer防 umask 导致子目录不可写
注意:chown -R 后不要立刻 composer install,先验证父目录可写:touch ./test-perm && rm ./test-perm。失败说明项目根目录本身没写权限,得先 chmod u+w .。
宝塔面板里跑 install,必须确认是 www 用户在执行
你在 SSH 里用自己账号执行没问题,不代表宝塔后台点「一键部署」或计划任务也能过。宝塔默认以 www 用户运行 PHP 相关操作,所以:
- 进到网站根目录(如
/www/wwwroot/example.com),执行:chown -R www:www . - 再加一句:
chmod -R u+rwX,go-w .(X表示只对已有执行权限的目录加 x,更安全) - 验证镜像是否对
www生效:sudo -u www composer config -g repo.packagist,输出必须是{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},否则要用sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/重配
很多卡住问题,其实就卡在 www 用户根本读不到你个人账号下配置的镜像。
报错路径里带 /tmp/ 或 /var/www/,优先查父目录权限
比如报错是 file_put_contents(/tmp/composer_archive123456.zip): Permission denied,别急着修 /tmp,先看 /tmp 的父目录(通常是 /)有没有被挂载为 noexec 或 nosuid;如果是 /var/www/myapp/vendor/autoload.php 拒绝,检查 /var/www/myapp 是否可写,而不是只盯 vendor/。
一个常被忽略的点:umask。执行 umask 看值,如果是 0022,新建文件默认无组写权限,某些 Composer 插件或自动生成脚本会因此失败。临时设为 umask 0002 再试,比硬 chmod 每个文件靠谱得多。










