Composer临时文件默认由PHP的sys_get_temp_dir()决定,与缓存无关;修改需通过TMPDIR环境变量、php.ini中sys_temp_dir配置或php -d指定,不可用Composer自身配置项。

Composer 的临时文件根本不是“动画缓存”
没有叫“动画缓存”的东西——这是对 composer install 过程中解压 ZIP/TAR 包时产生的临时文件的误称。这些临时文件(比如下载后的 package.zip、解压中途的 extract_abc123/ 目录)默认全走 PHP 的 sys_get_temp_dir(),和缓存目录 cache-dir 完全无关。
常见错误现象包括:
-
failed to open stream: Permission denied卡在Extracting archive - 磁盘空间不足报错,但
composer clear-cache无效 - CI 环境里反复失败,
COMPOSER_CACHE_DIR改了也没用
改临时路径只能动 PHP 层,Composer 不提供 config 项
Composer 本身没有 tmp-dir 或 temp-dir 配置项。它全程依赖 PHP 返回的临时路径,所以必须从 PHP 运行环境入手:
- Linux/macOS:启动前设
export TMPDIR="/your/writable/tmp"(注意不是TEMP) - Windows CMD:
set TMP=C:\your\tmp;PowerShell:$env:TMP="C:\your\tmp" - php.ini 中加
sys_temp_dir = "/path/to/tmp",CLI 模式下要确认没被单独的php-cli.ini覆盖 - 单次命令强制指定:
php -d sys_temp_dir=/tmp/composer-tmp composer install
验证是否生效:php -r "echo sys_get_temp_dir();" 输出必须是你设的路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
别混淆 COMPOSER_TMPDIR 和 COMPOSER_CACHE_DIR
这两个变量作用完全不同,混用会导致排查失效:
-
COMPOSER_CACHE_DIR只控制长期缓存(已下载的 ZIP、dist 包),不影响解压过程 -
COMPOSER_TMPDIR是 Composer 自己读取的变量,仅用于下载和解压阶段的临时文件,但它**优先级低于TMPDIR/TMP/sys_temp_dir** - 如果
COMPOSER_TMPDIR设了但依然往/tmp写,说明 PHP 层的sys_get_temp_dir()没被覆盖成功 - Docker 或 CI 场景下,
COMPOSER_TMPDIR常因路径未挂载或权限问题静默失效,务必配合mkdir -p && chmod 700初始化
CI/CD 和 Docker 里最容易栽跟头的地方
GitHub Actions、GitLab CI 或容器内跑 composer install 失败,90% 出在临时目录没管好:
- 别只写
COMPOSER_CACHE_DIR—— 它解决不了Permission denied解压错误 - 在 job 开头显式创建并导出:
mkdir -p /tmp/composer-tmp && export TMPDIR=/tmp/composer-tmp - Docker 运行时必须挂载:
docker run -v $(pwd)/tmp:/tmp ...,否则容器内/tmp是内存文件系统,空间小且重启即丢 - Alpine 镜像默认
/tmp权限为drwxr-xr-x,普通用户无法写,得先chmod 777 /tmp或换路径
真正卡住你的往往不是缓存位置,而是那个没人盯着看的 sys_get_temp_dir() 返回值——它不报错,只默默失败。

















