直接修改 composer 临时目录路径至 d:\temp 比清缓存更有效——因 windows 中文系统默认 %temp% 位于 c 盘且易被占满,而 composer clear-cache 不清理该目录;需通过环境变量 tmp/temp 和 php 参数 sys_temp_dir 共同重定向,并确保路径为纯 ascii 且有完全控制权限。

直接改 sys_get_temp_dir() 对应的路径,比反复清缓存或删 composer_*.zip 有效得多——中文 Windows 用户的 %TEMP% 默认落在系统盘(C:\Users\用户名\AppData\Local\Temp),而这个目录常年被各种软件写入,Composer 只是压垮骆驼的最后一根稻草。
怎么确认是 Temp 目录塞爆了?
报 No space left on device 却发现 C 盘还有几十 GB?大概率是 %TEMP% 所在分区 inode 耗尽或空间见底。中文系统下尤其明显:IDE、微信、迅雷、甚至 Windows 更新都会往这里扔临时文件。
- 先查真实路径:
php -r "echo sys_get_temp_dir();"—— 输出通常是C:\Users\你的用户名\AppData\Local\Temp - 进资源管理器,直接打开该路径,搜索
composer_和php*.phar,手动删掉所有匹配项 - 再运行
dir /s %TEMP% | findstr "File(s)"看总大小;如果超 2GB,基本就是它了
Windows 下如何安全重定向 Composer 的临时目录?
不能全局改 sys_get_temp_dir()(会影响其他 PHP 应用),但可以只让 Composer 走新路径。关键不是改 Composer 配置,而是启动时注入环境变量 + PHP 参数。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 新建一个大容量目录,比如
D:\temp(别用带空格或中文的路径) - PowerShell 中执行:
$env:TMP="D:\temp"; $env:TEMP="D:\temp"; php "-d" "sys_temp_dir=D:\temp" composer install - 验证是否生效:
php "-d" "sys_temp_dir=D:\temp" -r "echo sys_get_temp_dir();"应输出D:\temp - 注意:必须确保
D:\temp存在且当前用户有完全控制权限(右键属性 → 安全 → 编辑 → 添加当前用户 → 勾选“完全控制”)
为什么 composer clear-cache 常常不管用?
因为 clear-cache 只动 %APPDATA%\Composer\Cache,完全不碰 %TEMP%。而 Composer 解压 ZIP、生成 autoload、执行脚本时,90% 的临时文件都落在这儿——composer_*.zip、php*.phar、解压中间目录,全是“用完不删”的类型。
-
clear-cache后仍失败?十有八九是%TEMP%里还堆着几百个未清理的composer_*.zip - 更隐蔽的是 inode 耗尽:Windows 上每个临时文件都占一个句柄,
df -i在 Linux/macOS 有效,Windows 可用 PowerShell 查句柄数:Get-Process | ForEach-Object { $_.HandleCount } | Measure-Object -Sum,若单个进程超 10000 就危险 - 别依赖手动清理:加了
TMP/TEMP环境变量后,后续所有composer install都会自动写到新位置,旧%TEMP%不再增长
额外提醒:中文路径和权限陷阱
中文 Windows 用户容易踩两个坑:一是把临时目录设成 D:\我的临时文件 这类含中文路径,PHP 会因编码问题拒绝写入;二是新建目录后没给当前用户写权限,导致 Composer 报 Permission denied 而非磁盘满。
- 路径必须是纯 ASCII 字符(字母、数字、下划线、短横线),推荐
D:\tmp或D:\composer-tmp - 设置完环境变量后,务必用
whoami确认当前用户,并用icacls D:\tmp /grant "%USERNAME%:(OI)(CI)F"赋予权限 - 如果用 Git Bash 或 WSL,注意它默认走 Linux 的
/tmp,需单独配置TMPDIR,和 Windows 原生命令行互不影响
真正卡住 Composer 的,从来不是缓存目录大小,而是那个没人管、没人清、还默认落在 C 盘的 %TEMP%。改一次路径,后面半年不用再为 “No space left on device” 折腾。










