composer 本身无临时文件缓存路径配置项,所谓“临时文件”由 php 的 sys_get_temp_dir() 决定,与 cache-dir、cache-files-dir 等 composer 配置完全无关;/tmp/composer_*.zip 等是 php 解压时生成的运行时临时文件,需通过 php.ini 的 sys_temp_dir(linux/macos)或系统环境变量 temp/tmp(windows)统一管控。

Composer 本身没有临时文件缓存路径配置项,所谓“临时文件”实际由 PHP 决定,不是 Composer 控制的。 你改 cache-dir 或 cache-files-dir 都不会影响它。真要干预,得动 PHP 层或系统环境变量。
为什么改了 cache-dir 还有大量 composer_*.zip 堆在 /tmp?
因为这些文件根本不是 Composer 缓存,而是 PHP 在解压、流式读取 zip 包时调用 sys_get_temp_dir() 创建的临时文件。Composer 只是触发了这个过程,不参与路径选择。
-
/tmp/composer_*.zip、/tmp/php*.tmp、/tmp/phar-*.tmp全部来自 PHP 底层 I/O,Composer 不写也不删 -
composer clear-cache对它们完全无效 —— 它们不在cache-dir下,也不受任何 Composer 配置影响 - 常见现象:磁盘 inode 耗尽、
composer install卡在 “Extracting archive…”、重启后文件消失(因 tmpfs 清理)
怎么真正控制这些临时文件的存放位置?
必须绕过 Composer,直接约束 PHP 的临时目录行为。有且仅有两种可靠方式:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
Linux/macOS:在
php.ini中设置sys_temp_dir = /var/tmp,并确保该目录存在、可写、且不在内存文件系统(如 tmpfs)上 -
Windows:设置系统级环境变量
TEMP或TMP指向一个持久、有权限的路径,例如TEMP=D:\php-temp,然后创建目录并赋权给运行 Composer 的用户(如www-data或gitlab-runner) - CI/CD 容器中尤其注意:
TEMP必须挂载到持久卷,否则每次构建都新建空 tmp 目录,旧临时文件虽被清,但反复生成仍可能打爆 inode
别混淆 cache-dir 和临时文件路径
cache-dir 管的是 Composer 自己的缓存(元数据、下载包、归档),而临时文件是 PHP 运行时副产物。两者完全独立:
-
cache-dir设置后,composer install会把repo/、files/、archived/写进去,但它不影响解压时的php*.tmp -
cache-read-only: true只跳过写缓存,不改变 PHP 临时文件行为;即使缓存全只读,解压阶段仍需写临时文件 -
COMPOSER_CACHE_DIR环境变量只覆盖缓存路径,对sys_get_temp_dir()输出毫无影响
最容易被忽略的一点:你看到的“临时文件”往往不是 Composer 的责任,而是 PHP 在你机器上的默认行为。改路径前,先确认 php -r "echo sys_get_temp_dir();" 输出的是什么 —— 那才是真正的起点。










