phpmyadmin不显示多个服务器,本质是$cfg['servers'][$i]['verbose']缺失或为空;该字段非空是服务器出现在登录页下拉列表的必要条件,索引必须从1开始连续,且配置需为全局可执行代码。
phpmyadmin 多服务器模式下“丢失连接参数”,本质是 $cfg['servers'][$i]['verbose'] 缺失或为空 —— 它不显示,就等于没配置。
为什么改了 config.inc.php 却不显示多个服务器?
phpMyAdmin 只扫描 $cfg['Servers'] 数组中 'verbose' 键非空的条目。哪怕 host、port、auth_type 全写对了,只要 'verbose' 没设(或设为空字符串),该服务器就不会出现在登录页下拉列表里。
-
$cfg['Servers'][1]['verbose'] = '';→ 不显示 -
$cfg['Servers'][1]['verbose'] = '本地测试';→ 显示 - 数组下标必须从
1开始,$cfg['Servers'][0]被 phpMyAdmin 忽略 - 不能把服务器配置包在
if或函数里,必须是全局可执行的 PHP 代码段
如何快速验证并补全缺失的 verbose 字段?
打开你的 config.inc.php,搜索 $cfg['Servers'][,逐个检查每个服务器块是否含 'verbose' 且值非空。常见漏配场景:
- 复制粘贴时删掉了
'verbose'行 - 用脚本生成配置但没填
verbose占位符 - 从旧版本迁移,
verbose被误认为“可选”而省略
补全示例(注意下标连续、不跳号):
$cfg['Servers'][1]['host'] = '127.0.0.1'; $cfg['Servers'][1]['port'] = '3306'; $cfg['Servers'][1]['verbose'] = '开发机'; $cfg['Servers'][1]['auth_type'] = 'cookie'; $cfg['Servers'][2]['host'] = '172.18.0.2'; $cfg['Servers'][2]['port'] = '3307'; $cfg['Servers'][2]['verbose'] = 'Docker 测试库'; $cfg['Servers'][2]['auth_type'] = 'cookie';
为什么用循环配置比手写更可靠?
手动维护 $i 容易错位,尤其增删服务器时。官方推荐用循环动态注册,避免索引断裂:
$servers = [
['host' => 'db-prod.example.com', 'verbose' => '生产环境'],
['host' => 'db-staging.example.com', 'verbose' => '预发布环境'],
];
foreach ($servers as $i => $server) {
$cfg['Servers'][$i + 1]['host'] = $server['host'];
$cfg['Servers'][$i + 1]['verbose'] = $server['verbose'];
$cfg['Servers'][$i + 1]['auth_type'] = 'cookie';
}
这样新增服务器只需往 $servers 数组追加一行,无需手动算下标。
修改后仍不生效?先排除这三类干扰
配置写对了但登录页还是单选项,大概率卡在环境层:
- 文件权限不对:
config.inc.php必须能被 Web 服务器用户(如www-data)读取,否则静默失败 - 缓存未刷新:浏览器可能缓存了旧的登录页 JS,强制硬刷新(
Ctrl+Shift+R)或清空 localStorage - PHP 报错被屏蔽:在
config.inc.php开头临时加error_reporting(E_ALL); ini_set('display_errors', 1);,看页面是否爆出 parse error
真正容易被忽略的是:你改的 config.inc.php 可能根本不是 phpMyAdmin 实际加载的那个文件 —— 它可能被 symlink 指向别处,或宝塔/Nginx 配置指定了其他路径。先确认当前生效路径:grep -r "cfg\['Servers'\]" /var/www/html/phpmyadmin/ 2>/dev/null。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











