答案是临时路径(如/tmp或~/.composer/cache)归属错误、只读挂载或ACL拦截导致卡住。需查缓存路径、确认属主与权限、清理并重设目录权限,Windows需配置ACL,Docker/CI中应显式指定缓存路径。

Composer卡在Extracting archive或failed to open stream,先查/tmp和~/.composer/cache归属
报错里出现Extracting archive、failed to open stream或Could not write to /tmp/,大概率不是vendor目录问题,而是Composer在解压或缓存阶段用的临时路径被锁死。Linux/macOS默认走/tmp或~/.composer/cache,Windows走%APPDATA%\Roaming\Composer\Cache或C:\Users\XXX\AppData\Local\Temp\。这些路径若属主为root、挂载为只读、或被Windows ACL拦截,就会静默卡住——不报明确错误,只停在“Downloading”或“Loading composer repositories”之后。
- 查当前缓存路径:
composer config --global cache-dir,再ls -ld看归属 - 查系统临时目录:
php -i | grep "sys_temp_dir",确认PHP自身能写入该路径 - WSL用户额外检查:
cat /etc/wsl.conf是否含metadata=true,否则chown无效
Linux/macOS下清理临时目录并重设权限的最小动作
别删整个/tmp,只动Composer实际用到的部分。全局缓存损坏比项目vendor更隐蔽,且影响所有项目。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 清空缓存:
rm -rf $(composer config --global cache-dir) - 重建并设权:
mkdir -p $(composer config --global cache-dir) && chmod 755 $(composer config --global cache-dir) - 若
composer config --global cache-dir输出/root/.composer/cache,说明COMPOSER_HOME被污染,先执行unset COMPOSER_HOME再重试 - 临时改缓存路径测试:
COMPOSER_CACHE_DIR="$HOME/.composer-cache" composer install,成功即确认原路径不可写
Windows用户遇到Access is denied必须处理ACL,不能只删目录
在Windows上composer clear-cache报Access is denied,90%是%APPDATA%\Roaming\Composer\Cache的ACL没给当前PHP用户(如IIS_IUSRS、YourName)完全控制权。单纯删目录后重装,只要PHP进程仍以受限身份运行,问题立刻复现。
- 图形方式:右键该目录 → 属性 → 安全 → 编辑 → 添加当前用户名 → 勾选“完全控制”
- 命令行(管理员PowerShell):
icacls "$env:APPDATA\Roaming\Composer\Cache" /grant "$env:USERNAME:(OI)(CI)F" /t - 更稳妥的长期方案:
composer config -g cache-dir "%USERPROFILE%\composer-cache",然后手动mkdir "%USERPROFILE%\composer-cache" - 注意:如果PHP由IIS或XAMPP启动,还需给
IIS_IUSRS或Everyone加ACL,否则Web端调用Composer会同样失败
Docker和CI环境要绕过宿主机/tmp,显式指定缓存路径
在Docker容器或GitHub Actions中,/tmp常被挂载为tmpfs或权限受限,~/.composer/cache可能根本不存在或属主错乱。这时候依赖默认行为必卡。
- 流水线开头预建缓存目录:
mkdir -p .composer-cache && chmod 700 .composer-cache - 通过环境变量强制使用:
COMPOSER_CACHE_DIR="$PWD/.composer-cache" - 禁用高风险操作:
composer install --no-plugins --no-scripts --no-autoloader,降低对临时目录的依赖 - Dockerfile中避免
VOLUME ["/var/www/html"]后跑composer install;应在RUN阶段完成安装,再COPY代码
composer install失败时提示vendor/autoload.php写入失败,但根源可能是~/.composer/cache里某个.zip包解压时因/tmp无权创建子目录而静默中断。查错时得顺着报错路径往回推一级。

















