“cannot write to temporary directory”错误主因是session.save_path或upload_tmp_dir所在分区满或目录不可写,需用phpinfo()确认路径,df -h查磁盘占用,ls -ld验权限,再清理过期session或迁移目录并重启服务。
phpmyadmin 报错 “cannot write to temporary directory” 通常不是 phpmyadmin 自身问题,而是底层 session.save_path 或 upload_tmp_dir 指向的磁盘分区已满,或对应目录不可写。
确认哪个临时目录实际满了
phpMyAdmin 依赖 PHP 的两个关键临时路径:用户会话存储(session.save_path)和文件上传缓存(upload_tmp_dir)。错误可能来自任一路径。先查 PHP 实际配置:
- 新建一个
info.php文件,内容为<?php phpinfo(); ?>,通过浏览器访问,搜索session.save_path和upload_tmp_dir对应的值 - 在终端执行
df -h,看这些路径所在分区(如/var/lib/php/sessions通常在/var分区,/tmp通常挂载在/tmp或/)是否使用率 ≥90% - 运行
sudo ls -ld /var/lib/php/sessions /tmp确认目录存在且权限允许 PHP 进程(通常是www-data或apache用户)写入
清理或迁移 session.save_path 目录
该目录长期积累过期 session 文件是常见空间杀手,尤其当 session.gc_maxlifetime 设置过大或未启用自动回收时:
- 清空旧 session:
sudo find /var/lib/php/sessions -name "sess_*" -mmin +30 -delete(删除 30 分钟前的) - 若磁盘确实紧张,可将
session.save_path改到空间充足的分区,例如/home/php-sessions,并确保创建目录、设对权限:sudo mkdir -p /home/php-sessions && sudo chown www-data:www-data /home/php-sessions && sudo chmod 700 /home/php-sessions - 修改
php.ini中的session.save_path = "/home/php-sessions",然后重启 Web 服务(sudo systemctl restart apache2或sudo systemctl restart php-fpm)
检查 upload_tmp_dir 是否被误配或占满
即使没上传大文件,某些 phpMyAdmin 操作(如导入 SQL)也会经由 PHP 上传机制中转,触发对 upload_tmp_dir 的写入:
- 如果
upload_tmp_dir显式设为/tmp,而/tmp是 tmpfs 内存文件系统(df -T /tmp查类型),默认大小常为内存的 50%,容易撑爆 —— 此时要么扩大 tmpfs(改/etc/fstab),要么直接禁用该配置,让 PHP 回退到系统默认临时目录(通常是/tmp但非 tmpfs) - 若该值为空或未设置,PHP 会用系统
sys_get_temp_dir()返回路径,此时需检查那个路径所在分区空间 - 不建议把
upload_tmp_dir指向 NFS 或慢速存储,会导致导入卡顿甚至超时
验证 phpMyAdmin 是否真正恢复
别只刷新登录页——它可能仍从浏览器缓存加载旧 JS/CSS,掩盖后端问题:
- 用无痕窗口重新登录 phpMyAdmin
- 尝试一次小 SQL 导入(如
SELECT 1;),观察是否还报临时文件错误 - 查看 PHP 错误日志(
tail -f /var/log/php_errors.log或 Apache 的error.log),确认不再出现Failed to write session data或Unable to create temporary file - 注意:部分 Docker 部署的 phpMyAdmin 会把
/tmp挂载为 volume,需进容器检查df,而非宿主机
磁盘空间问题容易被误判为权限或配置错误;实际排查时,优先用 df 和 phpinfo() 锁定具体路径,再决定是清理、迁移还是调整挂载策略。临时目录若在 tmpfs 上,哪怕物理磁盘充足,一样会失败。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











