报错含“permission denied”且路径指向vendor/,根源是属主为root而非当前用户,应执行ls -ld vendor/确认第三列属主,若为root则需删除vendor/和composer.lock后用当前用户重装,或改属主并赋写权限。

报错含“Permission denied”且路径指向vendor/,先看属主不是chmod
终端里只要出现 file_put_contents(/path/to/project/vendor/autoload.php): Failed to open stream: Permission denied,问题就钉死在 vendor/ 目录本身。这不是权限数字(如755)不够,而是目录被 root 占了——执行 ls -ld vendor/,输出第三列(属主)如果是 root 而不是你当前用户名($(whoami)),就是根源。
别急着 chmod -R 777 vendor/:这会让 vendor/bin/phpunit 这类可执行文件被CI工具拦截,Git提交时还会报 ownership changed;更糟的是,某些子目录可能已混入 root 所有者,chown -R 都救不回来。
- 最稳妥做法:
rm -rf vendor/ composer.lock,再用当前用户运行composer install - 若不能删
composer.lock(如生产部署),至少确保目录归属和可写:sudo chown $USER:$USER vendor/+chmod u+w vendor/ - 检查是否还有残留:
ls -l vendor/ | head -n 3,扫一眼前几个子目录,确认没被root带偏
中文路径不是问题,但WSL或Docker里/mnt/c/或挂载目录会假性权限失败
报错里路径以 /mnt/c/Users/xxx/project 或 /var/www/myapp 开头,基本不是 Composer 本身的问题,而是底层文件系统不支持 Linux uid/gid。NTFS(WSL挂载的Windows盘)默认不解析 chown,mkdir() 失败是必然的。
Docker 中挂载宿主机目录后容器用户(如 www-data)无权写 vendor/,也不是镜像配置错了,而是挂载时没指定UID/GID匹配。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- WSL 用户:把项目移到 WSL 原生路径(如
~/projects/myapp),再运行composer install - Docker 用户:构建阶段加
RUN chown -R www-data:www-data /app,或改用非root用户挂载(如docker run -u 1001:1001) - 别在容器里
sudo chown—— 权限问题必须在构建或启动阶段解决
全局缓存目录 ~/.composer/cache 被 root 占了,Update会静默卡住
报错含 Writing cache file ~/.composer/cache/repo/https---packagist.org/,说明全局缓存目录被污染。这是误用 sudo composer global require 的典型后遗症,后续所有 composer update 都会在写缓存阶段失败,但错误不明显,只表现为“没反应”或“卡住”。
查归属:ls -ld $(composer config --global cache-dir),如果属主不是当前用户,就得处理。
- 推荐换路径:
mkdir -p ~/composer-cache && chown $USER:$USER ~/composer-cache && composer config --global cache-dir ~/composer-cache - 然后必须执行
composer clear-cache,否则不会自动切到新路径 - 若坚持修原路径:
sudo chown -R $USER:$USER $(composer config --global cache-dir)
vendor已锁定提示不是错误,但混入root后update会半途失败
vendor directory is locked 是正常提示,表示 vendor/ 已严格按 composer.lock 还原。但如果你之前用 sudo composer install 污染过 vendor/,现在用普通用户跑 composer update,就会在中间某一步突然失败——比如写入 installed.json 时 Permission denied,或者某个包的 post-install-cmd 因权限不足中断。
这种“半途失败”最难排查,因为错误不总出现在开头,且日志里可能夹杂 autoload 错误、Class not found 等假象。
- 遇到 update 半途退出,第一反应不是改
composer.json,而是立刻ls -ld vendor/确认属主 - 别信
--force-reinstall能绕过权限问题——它照样要往vendor/写文件,root 占着就还是失败 - 真正能兜底的,只有删干净重来:
rm -rf vendor/ composer.lock+ 当前用户composer install
ls -ld 输出的第三列。










