应将自定义主题移至独立目录并用 $cfg['ThemePath'] 指定路径,避免升级时被覆盖;官方升级默认干净覆盖 themes/ 目录,直接修改原 themes/ 内容或仅设 $cfg['ThemeDefault'] 均不可靠。
因为 phpmyadmin 升级时会覆盖 themes/ 目录,而手动安装的主题通常直接放在这里,没有被纳入版本管理或升级保护机制。
phpMyAdmin 升级如何处理 themes/ 目录
官方打包(如 Debian 包、Windows ZIP、Docker 镜像)在升级时默认执行「干净覆盖」:解压新版本时,themes/ 会被完整替换为新包里的内容。即使你之前把自定义主题复制进去了,只要没改名、没加保护,就直接被删掉。
- Debian/Ubuntu 的
apt upgrade会用dpkg覆盖整个/usr/share/phpmyadmin/themes/ - 手动解压 ZIP 升级时,多数人直接
cp -r phpMyAdmin-5.2.1/* /var/www/phpmyadmin/,themes/就被整体冲掉 - Docker 官方镜像每次拉取新 tag,
/usr/share/phpmyadmin/themes/是只读层,无法持久化你的主题
怎样让自定义主题在升级后仍可用
核心思路是「不把主题放进会被覆盖的目录」,改用 phpMyAdmin 支持的外部主题路径机制 —— 通过 $cfg['ThemePath'] 指向独立位置。
- 在
config.inc.php中添加:$cfg['ThemePath'] = '/var/lib/phpmyadmin-themes';
- 确保该路径存在、Web 服务器可读(如
chown -R www-data:www-data /var/lib/phpmyadmin-themes) - 把你的主题文件夹(含
theme.json和css/等)整个复制进去,例如:/var/lib/phpmyadmin-themes/my-dark-theme/ - 升级 phpMyAdmin 后,只需确认
$cfg['ThemePath']行仍在config.inc.php中即可,主题自动保留
为什么不用 $cfg['ThemeDefault'] 或修改 themes/original/
这两个做法看似简单,但实际埋雷:
-
$cfg['ThemeDefault'] = 'my-theme'无效,除非my-theme已在themes/下被扫描到;它不负责加载路径,只指定激活哪个已发现的主题 - 直接改
themes/original/或themes/pmahomme/内的 CSS/JS:升级后所有改动丢失,且难以 diff 和回滚 - 部分主题依赖
theme.json中的name、version字段,硬塞进默认 theme 文件夹可能引发解析失败或界面错乱
真正稳定的方案只有把主题放到 phpMyAdmin 不碰的地方,并用 $cfg['ThemePath'] 显式声明。升级前不用备份主题,升级后也不用手动恢复——前提是这行配置没被重置。很多人升级后主题消失,其实只是 config.inc.php 被新包里的默认配置覆盖了,记得检查这一行是否还在。
立即学习“PHP免费学习笔记(深入)”;



















