必须设$cfg['ServerDefault'] = 0且服务器索引从1开始连续整数,否则登录下拉列表仅显示一个或空白;根本原因非Nginx/MySQL版本问题,而是config.inc.php解析失败或索引违规,如索引跳号、语法错误、必填项缺失或配置路径错误。

必须设 $cfg['ServerDefault'] = 0,且所有服务器必须用从 1 开始的连续整数索引($cfg['Servers'][1]、$cfg['Servers'][2]…),缺一不可;否则登录页下拉列表只显示一个或直接空白。
为什么新服务器不显示在登录下拉列表
根本不是 Nginx 或 MySQL 版本问题,而是 config.inc.php 解析失败或索引违规。常见现象包括:
- 只显示第一个服务器(
$cfg['Servers'][1]之后全被忽略) - 页面白屏(PHP Parse error:引号未闭合、分号遗漏、注释后紧跟代码)
- 下拉列表为空(
$cfg['ServerDefault']被注释、设为false或字符串'0')
phpMyAdmin 启动时只加载 $cfg['Servers'] 数组中索引合法的项——必须是整数、从 1 开始、无跳号、无重复。任何语法错误都会导致后续所有配置停止解析。
手动硬编码 $cfg['Servers'][$i] 的典型错误
复制粘贴改索引看似快,但极易触发连锁故障:
立即学习“PHP免费学习笔记(深入)”;
-
$i没重置或没递增,比如写完[1]后直接写[1]第二次,覆盖前一个 - 索引跳过:写了
[1]和[3],中间缺[2]→[3]及之后全部失效 - 在配置块里写
// First server注释后换行紧接代码 → PHP 把换行当字符串拼入数组,报Parse error: syntax error, unexpected T_STRING - 漏掉必填项:
'host'或'auth_type'缺失 → 该条目被静默丢弃
用循环生成 $cfg['Servers'] 才真正可靠
这是官方 examples/config.manyhosts.inc.php 推荐方式,彻底规避索引管理失误:
-
$hosts数组下标建议从 1 开始(如1 => [...], 2 => [...]),避免count()和循环变量错位 - 循环内必须显式设置:
$cfg['Servers'][$i]['host']和$cfg['Servers'][$i]['auth_type'] = 'cookie' -
'verbose'非必需但强烈建议加上,否则下拉列表里全是localhost分不清哪个是哪个 - 记得加
$cfg['LoginCookieValidity'] = 86400;,否则 cookie 默认 2 小时过期,频繁掉线
示例片段:
$hosts = [
1 => ['host' => '192.168.1.10', 'port' => '3306', 'verbose' => 'Prod DB'],
2 => ['host' => '10.0.0.5', 'port' => '3307', 'verbose' => 'Staging DB'],
];
foreach ($hosts as $i => $h) {
$cfg['Servers'][$i]['host'] = $h['host'];
$cfg['Servers'][$i]['port'] = $h['port'] ?? '3306';
$cfg['Servers'][$i]['verbose'] = $h['verbose'] ?? '';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
}
最容易被忽略的是:配置文件路径可能不止一个(/etc/phpmyadmin/config.inc.php、/usr/share/phpmyadmin/config.inc.php、/var/www/html/phpmyadmin/config.inc.php),改错位置等于没改。



















