phpMyAdmin 5.2 登录页不显示多服务器下拉列表,根本原因是 config.inc.php 解析失败或 $cfg['Servers'] 数组未按规范构建:存在 BOM、中文标点、PHP 版本过低、索引不连续(必须从 1 开始)、auth_type 错设为 'http'、ServerDefault 位置错误或值非法。
phpmyadmin 5.2 登录页不显示多服务器下拉列表,基本可以断定 $cfg['servers'] 数组根本没被 php 成功解析或未按规范构建——不是前端藏了、也不是缓存问题,是后端配置压根没进内存。
config.inc.php 被 PHP 解析失败导致 $cfg['Servers'] 为空
phpMyAdmin 5.2 启动时直接 include 配置文件,一旦 PHP 报语法错误(哪怕只是开头一个 BOM 或中文分号),整个文件中断,$cfg['Servers'] 就不会被定义。你看到的登录页只有一个服务器甚至空白页,就是这个原因。
- 用
file -i config.inc.php检查编码,若输出含with UTF-8 Unicode (with BOM),说明有 BOM 头;用vim config.inc.php +':set nobomb | wq'清除 - 逐行检查标点:所有
;必须是英文分号,引号必须是英文'或",不能是中文「」、‘’、; - 确认 PHP 版本 ≥ 7.2(phpMyAdmin 5.2 最低要求),运行
php -v验证;若为 7.1 或更低,['host' => 'x']会直接 fatal error - 删掉任何残留的
$i = 0;或$i++前置逻辑——它可能在数组赋值前就污染了索引
$cfg['Servers'] 索引不连续或从 0 开始
phpMyAdmin 5.2 严格遍历 $cfg['Servers'],从索引 1 开始,遇到第一个空值、NULL、缺失 host 键,就立即中止扫描。跳号(如只配了 [1] 和 [3])或从 [0] 开始,都会让后续项失效。
- 所有服务器必须使用连续正整数索引:
$cfg['Servers'][1]、$cfg['Servers'][2]、$cfg['Servers'][3]……不能是[0]、[1]、[2] - 每个
$cfg['Servers'][$i]至少要包含'host'和'auth_type',否则该索引会被跳过 - 推荐用循环方式配置(官方示例
config.manyhosts.inc.php的写法),避免手动管理$i:$hosts = [ ['host' => 'localhost', 'port' => 3306], ['host' => '172.18.0.2', 'port' => 3307], ]; $i = 0; foreach ($hosts as $host) { $i++; $cfg['Servers'][$i]['host'] = $host['host']; $cfg['Servers'][$i]['port'] = $host['port']; $cfg['Servers'][$i]['auth_type'] = 'cookie'; // 注意不是 'http' }
auth_type = 'http' 让多服务器完全失效
设成 'http' 后,Apache/Nginx 接管认证,phpMyAdmin 收不到用户“想连哪台”的选择意图,只能硬连一个默认实例。其他所有 $cfg['Servers'][$i] 配置全部被忽略,登录页下拉列表可能还显示多个条目,但点哪个都连向同一套凭据。
- 所有服务器块的
auth_type必须设为'cookie'或'config',绝对不要用'http' - 确认没有全局覆盖:比如在循环外写了
$cfg['Servers'][$i]['auth_type'] = 'http';,会污染所有后续项 - 如果用了
'config',确保每台服务器的'user'和'password'已填且有效;'cookie'则依赖登录表单输入
ServerDefault = 0 放错位置或值非法
$cfg['ServerDefault'] = 0 表示“不预选任何服务器”,强制显示下拉列表。但它必须放在 config.inc.php 文件末尾,在所有 $cfg['Servers'] 定义之后;若提前出现,phpMyAdmin 可能读到一半就终止加载。
立即学习“PHP免费学习笔记(深入)”;
- 检查该行是否被注释(以
//或/* */包裹)、是否拼错变量名(如写成$cfg['Server_Default']) - 值必须是整数
0,不能是字符串'0'或布尔false - 如果只配了一台服务器却仍想显示下拉列表,也必须设为
0;设为1会直接跳过选择页
最常被忽略的是:PHP 解析失败时,$cfg['Servers'] 根本不存在,后续所有逻辑都无从谈起。先用 php -l config.inc.php 检查语法,再看 $i 是否被意外重置,最后才调 auth_type 和 ServerDefault。顺序错了,修半天也白搭。



















