Composer安装时的临时解压路径默认由PHP的sys_get_temp_dir()决定,不可通过Composer环境变量直接修改;需通过设置TMPDIR环境变量、php.ini中配置sys_temp_dir或运行时php -d指定来覆盖。

Composer 的临时文件默认存哪
Composer 安装包时会先下载 ZIP 或 TAR 归档到本地临时目录,再解压安装。这个临时路径默认由 PHP 的 sys_get_temp_dir() 决定,通常是系统级的(比如 /tmp 在 Linux/macOS,C:\Windows\Temp 在 Windows)。但实际中常遇到权限不足、磁盘空间小、或 CI 环境隔离要求高,导致安装失败或卡住。
如何用 COMPOSER_CACHE_DIR 和 COMPOSER_HOME 区分缓存与临时文件
注意:COMPOSER_CACHE_DIR 控制的是包缓存(已下载归档的复用目录),不是安装过程中的临时解压路径;COMPOSER_HOME 影响的是配置、凭证等元数据位置。真正影响「安装时解压临时目录」的是 PHP 自身的临时路径,Composer 不提供独立配置项覆盖它。
- 想改下载归档的缓存位置?设
COMPOSER_CACHE_DIR=/your/cache/path - 想让 Composer 配置不写进用户家目录?设
COMPOSER_HOME=/your/composer/home - 但 zip 解压那一步仍走
sys_get_temp_dir()—— 这才是你真正要干预的地方
修改临时目录的三种可靠方式
必须从 PHP 层级或运行环境入手,Composer 本身不接管该路径:
- 启动前设置环境变量:
export TMPDIR=/your/tmp/dir(Linux/macOS)或set TMP=C:\your\tmp(Windows CMD)—— 多数 PHP SAPI 会识别该变量并覆盖sys_get_temp_dir() - 在
php.ini中加:sys_temp_dir = "/your/tmp/dir",然后重启 PHP 进程(CLI 模式下需确保没被 CLI 专属 php.ini 覆盖) - 运行时强制指定(适合单次命令):
php -d sys_temp_dir=/your/tmp/dir composer install
验证是否生效:运行 php -r "echo sys_get_temp_dir();",输出应为你设定的路径。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
CI/CD 中常见坑与绕过技巧
GitHub Actions、GitLab CI 等环境常限制写入系统 /tmp,或容器内 TMPDIR 未挂载可写卷,导致 composer install 报错类似 failed to open stream: Permission denied 或卡在 Extracting archive。
- 别只改
COMPOSER_CACHE_DIR—— 它不能解决解压失败 - 在 job 步骤开头显式设置
TMPDIR并确保路径存在且可写:mkdir -p /tmp/composer-tmp && export TMPDIR=/tmp/composer-tmp - Docker 场景下,记得用
-v $(pwd)/tmp:/tmp挂载宿主机临时目录,否则容器内/tmp是内存文件系统,可能空间不足 - 某些精简镜像(如
php:alpine)默认没设TMPDIR,且/tmp权限受限,必须手动初始化
临时目录这层没有 Composer 原生开关,所有方案都得在它启动前把 PHP 的底层路径钉死——漏掉这步,其他配置全白搭。










