mysqli和mbstring扩展必须启用,phpMyAdmin 5.2才可运行;需通过php -m验证,确保php.ini中extension=mysqli和extension=mbstring未被注释,并正确配置config.inc.php及Web服务器路由。

确认 PHP 扩展已启用:mysqli 和 mbstring 是硬性门槛
phpMyAdmin 5.2 要求 mysqli 和 mbstring 必须启用,缺一不可。PHP 8.2 默认不启用这两个扩展(尤其在某些精简版容器或自编译环境中),仅装好 PHP 并不等于能跑起来。
检查方式:php -m | grep -E "mysqli|mbstring"。若无输出,进宝塔或手动编辑 php.ini,确保以下两行未被注释且路径正确:
extension=mysqli extension=mbstring
常见坑点:
-
mysqli扩展名写成mysql(已废弃,PHP 7.0+ 完全移除) - 宝塔面板里「禁用函数」列表中误删了
mysqli_connect或mb_strlen - Docker 环境下没挂载
ext-mysqli镜像层,只装了php:8.2-cli基础镜像
config.inc.php 必须存在且权限为 644
phpMyAdmin 5.2 不再兼容直接读取 libraries/config.default.php 作为主配置——它强制要求 config.inc.php 文件位于根目录。没有这个文件,会报错 Wrong permissions on configuration file 或直接白屏。
立即学习“PHP免费学习笔记(深入)”;
正确操作流程:
- 进入 phpMyAdmin 根目录(如
/www/wwwroot/example.com/pma) - 执行
cp config.sample.inc.php config.inc.php - 运行
chmod 644 config.inc.php(不能是 600 或 755,Nginx/Apache 进程需可读) - 编辑
config.inc.php,至少改这三处:
$cfg['Servers'][$i]['host'] = '127.0.0.1'; // 不要用 localhost(可能触发 socket 路径解析失败) $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['blowfish_secret'] = '6a9f8c2e1d4b7a0f3c9e2d1b8a5f0c3e'; // 必须填满 32 字符,不能留空
Apache/Nginx 路由配置必须匹配 alias 或 location 规则
直接把 phpMyAdmin 放进网站根目录(如 /www/wwwroot/example.com/phpmyadmin)再访问 /phpmyadmin,大概率 403 或 404——因为现代 Web 服务器默认禁止访问含点号的路径(如 .php 以外的敏感后缀)或限制 index.php 以外的入口。
推荐方案(以 Nginx + 宝塔为例):
- 新建子目录部署,比如
/pma,而非/phpmyadmin(减少扫描风险) - 在站点配置文件的
location ~ \.php$ {块上方添加:
location /pma {
alias /www/wwwroot/example.com/pma/;
index index.php;
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
关键点:
-
alias结尾必须带/,否则路径拼接错误 -
SCRIPT_FILENAME必须设为$request_filename,不是$document_root$fastcgi_script_name(后者在 alias 下会指向错误物理路径) - Apache 用户请用
Alias+<Directory>显式放开AllowOverride All和Require all granted
登录后空白或 #2002 错误:优先查 MySQL 连接方式
页面能打开、登录框出现,但输完账号密码后跳转空白页或报 #2002 Cannot log in to the MySQL server,90% 是连接参数不匹配。
重点核对 config.inc.php 中这几项:
-
$cfg['Servers'][$i]['host']:本地环境统一用'127.0.0.1',不用'localhost'(后者在 PHP 8.2+ 可能强制走 Unix socket,而 MariaDB 10.11+ 默认关闭 socket) -
$cfg['Servers'][$i]['port']:显式写'3306',别留空(某些云数据库监听非标端口) -
$cfg['Servers'][$i]['socket']:保持为空字符串'',除非你明确知道 socket 路径且 MySQL 开启了skip-networking=off -
$cfg['Servers'][$i]['connect_type']:设为'tcp',避免自动 fallback 到 socket
验证手段:在服务器上执行 mysql -h 127.0.0.1 -P 3306 -u root -p,能连通才说明服务层没问题。
最后提醒:phpMyAdmin 5.2 的 $cfg['LoginCookieValidity'] 默认是 1440 秒(24 分钟),如果改大了,务必同步调高 PHP 的 session.gc_maxlifetime,否则 cookie 会提前失效——这个细节常被忽略,导致反复登录。



















