应升级phpmyadmin至5.0+版本,因其已弃用mcrypt并默认使用openssl加密;php 7.2+已彻底移除mcrypt函数,硬装扩展必然失败且不安全,需确认openssl启用并清空cookie与session。
别装 mcrypt,也别改 php.ini 加 extension=mcrypt.so —— php 7.2+ 已彻底移除它,硬补只会失败或引发安全问题。真正该做的是升级 phpmyadmin 到 5.0+,并确认 openssl 正在运行。
为什么“安装 mcrypt”在 PHP 7.2+ 上注定失败
你看到的警告不是配置漏了,是版本断层:PHP 7.2 正式废弃 mcrypt,7.3 起连编译符号都删了;所有尝试用 pecl install mcrypt、apt install php-mcrypt 或手动编译的方案,在 PHP ≥ 7.2 环境下都会报错或静默失效。
常见错误现象包括:
-
PHP Warning: Module 'mcrypt' already loaded in Unknown on line 0(其实是加载失败后重复提示) -
Call to undefined function mcrypt_encrypt()即使扩展看似启用 - Apache/Nginx 日志里出现
undefined symbol: mcrypt_module_open
根本原因:PHP 内核已移除全部 mcrypt_* 函数声明,不是“没开”,是“没了”。
确认当前环境真实 PHP 版本和模块状态
CLI 下的 php -v 和 Web 服务器实际调用的 PHP 可能不同 —— 这是升级失败最常见的盲区。
实操建议:
- 在 phpMyAdmin 根目录新建
info.php,内容为<?php phpinfo(); ?>,用浏览器访问它 - 重点核对页面中
Loaded Configuration File和PHP Extension Dir的路径,是否与php -i | grep "Loaded Configuration"输出一致 - 搜索页面是否有
openssl模块(必须启用),但绝对不要搜mcrypt—— 它不该存在 - 若不一致,检查 Apache 的
LoadModule php_module路径,或 Nginx 的fastcgi_pass是否指向正确的php-fpm实例
升级 phpMyAdmin 到 5.0+ 并清理残留
phpMyAdmin 4.8.x 及更早版本会硬检查 mcrypt,5.0.0 起完全切换至 openssl_encrypt/openssl_decrypt,无需额外配置,只要 openssl 扩展启用即可工作。
关键步骤:
- 备份现有
config.inc.php(尤其是$cfg['blowfish_secret']值,新版本仍使用它派生密钥) - 下载官方最新稳定版(如
phpMyAdmin-5.2.2-all-languages.tar.gz),注意 PHP 版本要求(5.2.x 需 ≥ 7.2.5) - 解压覆盖原目录,重设权限:
chown -R www-data:www-data /path/to/phpmyadmin(用户组按实际 Web 进程调整) - 删除所有
mcrypt相关配置:注释或删掉php.ini中的extension=mcrypt.so、extension=php_mcrypt.dll等行 - 清空浏览器 cookie 和服务器 session 文件(如
/var/lib/php/sessions/),否则可能因加密方式不兼容导致登录循环或 403
导出加密功能失效?那是你还在用旧版逻辑
即使升级后,“导出 → 加密 → AES”按钮仍灰掉,大概率是因为你用的是 phpMyAdmin ≤ 4.8.x 的自定义主题或缓存未清。新版不再依赖 mcrypt,但部分老插件或本地缓存可能误判。
验证方法:
- 打开浏览器开发者工具,清空 Application → Cookies 和 Storage → Cache
- 访问
/phpmyadmin/index.php?lang=en强制英文无缓存入口 - 检查导出页源码里是否还有
mcrypt字样(新版应只有openssl) - 若仍异常,临时在
config.inc.php加一行:$cfg['McryptDisableWarning'] = true;(仅用于诊断,非修复)
真正容易被忽略的是:升级后首次登录时,服务端 session 数据仍按旧加密方式生成,必须清空才能触发新密钥派生 —— 这个动作比改配置重要得多。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











