直接原因是phpMyAdmin结构页触发版本检查时访问不可达的https://www.phpmyadmin.net/home_page/version.json超时30秒,且Util.class.php中strftime()因gettext缺失返回乱码破坏AJAX响应。

phpMyAdmin结构页卡死的直接原因:版本检查超时
页面卡在「结构」选项卡,不是数据库慢,也不是表太大,而是 phpMyAdmin 启动时默认发起的一次外部 HTTP 请求卡住了。它试图访问 https://www.phpmyadmin.net/home_page/version.json 检查更新,而该域名已长期不可达——国内多数环境 DNS 解析失败或连接超时,file_get_contents() 或 curl_exec() 默认等待 30 秒才放弃,期间整个 PHP 请求阻塞,浏览器就“假死”。
为什么只在结构页卡、其他页正常
结构页(tbl_structure.php)会触发 Util::showHint() 等函数,这些函数内部调用 VersionCheck::check();而 SQL 执行页、浏览页等不走这个路径。所以你点「SQL」能立刻响应,一进「结构」就转圈几十秒。
- 卡死行为与当前操作的表无关,哪怕空表也卡
- 仅影响首次加载或会话缓存过期后(默认 6 小时)的加载
- 宝塔、XAMPP、手动部署等所有环境均存在此问题
怎么快速定位并修复
别改 MySQL 配置、别优化查询,直接干掉那个无意义的网络请求:
- 找到
./version_check.php文件(通常在 phpMyAdmin 根目录) - 把从
$save = true;开始、到curl_exec($curl_handle);结束的整段逻辑注释或删掉 - 如果用了宝塔,路径一般是
/www/server/phpmyadmin/phpmyadmin_*/version_check.php - 改完无需重启 PHP,但要清浏览器缓存(否则可能还在用旧 JS/HTML 缓存)
注意:别碰 config.inc.php 里的 $cfg['VersionCheck']——这个配置项在 4.9+ 版本已废弃,设为 false 也不生效。
还有个隐藏坑:gettext 缺失导致 AJAX 崩溃
如果你改完 version_check.php 还卡,且控制台报 Uncaught SyntaxError: Unexpected token 或返回乱码 HTML,大概率是服务器没装 gettext 扩展,而 Util.class.php 里 strftime() 调用失败后返回了非法字符,破坏了 AJAX 响应结构。
- 确认是否启用:
php -m | grep gettext - 临时修复:打开
./libraries/Util.class.php,搜索return strftime($date, $timestamp); - 替换成:
return date('Y-m-d H:i:s', $timestamp);(最简兼容写法) - 不推荐硬写
gmdate(... + 28800),时区应由date_default_timezone_set()统一控制
真正卡死往往就这两处:一个远程请求在等死,一个本地格式化在吐错。修完刷新,结构页应该秒开——别被“数据库管理工具卡”这个表象带偏方向。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











