PHP解析失败导致$cfg['Servers']未加载,常见于BOM头、中文标点、漏分号、PHP版本过低;索引须从1连续递增;auth_type='http'使多服务器失效,应设为'cookie';$cfg['ServerDefault']=0需置于文件末尾。
PHP 解析失败导致 $cfg['Servers'] 根本没加载
phpmyadmin 5.x 启动时会直接 include config.inc.php,一旦 php 解析器卡在语法错误上,整个数组就不会被定义——不是“不显示”,而是压根没进内存。你看到的登录页只有一个服务器,甚至空白页,往往就是这个原因。
常见触发点:
- 配置文件开头或结尾有 BOM 头(
file -i config.inc.php查编码,用vim config.inc.php+:set nobomb | wq清除) - 用了中文标点:比如把
;写成中文顿号、逗号,或者引号是全角「」而不是英文 '' - 漏分号或逗号:尤其在复制粘贴后,最后一行常少
;,或数组项之间漏, - 混用短数组语法
[]和老版本 PHP:phpMyAdmin 5.x 要求 PHP ≥ 7.2,但若服务器实际跑的是 7.1 或更低,['host' => 'x']会直接报错
$cfg['Servers'] 索引不连续或从 0 开始
phpMyAdmin 5.x 严格遍历 $cfg['Servers'] 数组,从索引 1 开始,遇到第一个空值、NULL 或缺失键就中止。哪怕只配了 $cfg['Servers'][1] 和 $cfg['Servers'][3],[3] 也不会出现。
必须满足:
- 所有服务器块索引为
1、2、3…… 不能跳号,不能用0 - 删掉原始配置里残留的
$i = 0;或$i++前置逻辑,否则可能覆盖索引 - 确认没有注释掉某一行导致整个块为空,例如:
// $cfg['Servers'][2]['host'] = 'x';留着但没取消注释,等于该索引下无有效配置
auth_type = 'http' 让多服务器形同虚设
设成 'http' 后,Web 服务器(Apache/Nginx)接管认证,phpMyAdmin 完全收不到用户“想连哪台”的意图。它只能硬编码一个默认服务器,其他 $cfg['Servers'][$i] 配置全部失效。
更麻烦的是:
-
$cfg['Servers'][$i]['user']和$cfg['Servers'][$i]['password']被忽略,无法按服务器区分账号 - 如果某台 MySQL 开启了
require_secure_transport=ON,HTTP 认证层根本传不了 SSL 参数,连接必失败 - 登录页下拉列表仍可能显示多个条目,但点哪个都连向同一套凭据绑定的实例
唯一可靠的选择是 'cookie':登录页选服务器,session 记住选择,后续请求自动路由到对应配置。
$cfg['ServerDefault'] = 0 没设或设错
这个配置控制是否显示服务器切换菜单。设成 1 表示“默认连第一台,不显示下拉”;设成 0 才强制展示所有已加载的 $cfg['Servers'] 条目。
容易被忽略的细节:
- 它必须写在所有
$cfg['Servers'][x]配置之后,否则可能被后续赋值覆盖 - 不要写成
$cfg['ServerDefault'] = '0'(字符串),PHP 会当真——必须是整数0 - 某些旧模板里自带
$cfg['ServerDefault'] = 1,改多服务器时忘了同步改这里
最稳妥的做法:把 $cfg['ServerDefault'] = 0; 放在 config.inc.php 最末尾,且单独一行,前面不跟任何其他赋值语句。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











