phpmyadmin在xampp中显示多个服务器需手动修改config.inc.php,用foreach循环配置$cfg['servers']数组(索引从1开始连续),禁用$cfg['allowarbitraryserver']=true,并确保路径正确、编码无bom、各host可连通。

phpMyAdmin 在 XAMPP 中默认只配置了本地 localhost 一个服务器,要让它在登录页显示多个可选服务器(比如本地 MySQL、Docker 中的 MariaDB、测试机上的远程实例),必须手动修改 config.inc.php —— 而且不能靠“复制粘贴配置块+手调 $i”这种做法,否则大概率只显示第一个或报空白页。
确认 config.inc.php 文件位置并备份
XAMPP 的 phpMyAdmin 配置文件路径固定,但容易误改错文件:
- Windows:通常为
C:\xampp\phpMyAdmin\config.inc.php(不是config.sample.inc.php) - macOS/Linux:通常是
/opt/lampp/phpmyadmin/config.inc.php或/Applications/XAMPP/xamppfiles/phpmyadmin/config.inc.php - 切勿直接编辑
libraries/config.default.php—— 它是只读模板,改了也不生效 - 修改前务必复制一份
config.inc.php.bak,XAMPP 启动失败时可快速回滚
用 foreach 循环配置 $cfg['Servers'] 数组
phpMyAdmin 要求 $cfg['Servers'] 的键必须是从 1 开始的连续正整数。手动写 $i++ 多次极易跳索引或重复覆盖,唯一稳妥方式是用循环生成每个服务器配置块。
在 config.inc.php 底部(?> 之前)插入以下代码:
<?php $i = 0;
$hosts = [
'localhost', // 默认 XAMPP MySQL(3306)
'172.18.0.1:3307', // Docker 容器,端口非标需显式写
'192.168.1.100' // 局域网内另一台机器
];
foreach ($hosts as $host) {
$i++;
$cfg['Servers'][$i]['host'] = $host;
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['auth_type'] = 'cookie'; // 推荐,避免明文存密码
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['verbose'] = 'Server ' . $i . ' (' . $host . ')';
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'pmapass';
}
-
$cfg['Servers'][$i]['verbose']是登录下拉框里显示的名字,建议包含$host方便区分 - 如果某台服务器需要固定登录用户(如测试环境用
root无密码),可把'user'和'password'改成具体值,并将'auth_type'改为'config' - 所有服务器共用同一套
pma控制用户即可,无需为每个服务器单独建控制库
避免 $cfg['AllowArbitraryServer'] = true 这个坑
网上有些教程让你加 $cfg['AllowArbitraryServer'] = true;,这是危险操作:
- 它允许用户在登录页手动输入任意 host,绕过你预设的服务器列表
- XAMPP 默认关闭该选项,开启后可能被扫描利用(尤其暴露在局域网时)
- 它和多服务器下拉列表功能无关——下拉列表是否出现,只取决于
$cfg['Servers']数组是否至少有两个合法索引项([1]和[2]) - 除非你明确需要“自由填 host”功能,否则别开
验证与调试常见失败点
改完保存,重启 Apache,访问 http://localhost/phpmyadmin。如果仍不显示下拉框,优先检查这几处:
- 浏览器缓存:强制刷新(
Ctrl+Shift+R)或换隐身窗口 - PHP 报错:打开 XAMPP 控制面板 → Apache → Config → PHP Settings,确认
display_errors = On,再看错误日志是否有Undefined index或语法错误 - 索引断层:比如
$cfg['Servers'][1]有,$cfg['Servers'][2]缺失,或中间插了[0]—— phpMyAdmin 会静默忽略非法索引 - 配置位置错误:确保代码插在
config.inc.php的全局作用域,不在任何if、function或条件块内 - 权限问题:Windows 下若用记事本保存,可能编码变成 UTF-8 with BOM,导致解析失败;推荐用 VS Code 或 Notepad++ 保存为 UTF-8 无 BOM
最隐蔽的问题是:你写了三个服务器,但其中某个 $host 值无法 DNS 解析(比如拼错 IP 或主机名),phpMyAdmin 不会报错,但整个 $cfg['Servers'] 数组可能加载失败——建议先用 ping 或 mysql -h 手动验证每个地址连通性。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











