跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

phpEnv安装时提示缺少MSVCR120.dll导致MySQL打不开办?

根本原因是phpEnv所依赖的MySQL二进制包(如mysql-5.7.x-winx64)由Visual Studio 2013编译,需系统预装对应位数的Microsoft Visual C++ 2013 Redistributable(x64或x86),而Windows默认不包含msvcr120.dll和msvcp120.dll。 phpEnv 启动 MySQL 失败并报
MSVCR120.dll
缺失,根本原因不是 phpEnv 本身有问题,而是它依赖的 MySQL 二进制包需要 Visual C++ 2013 运行库 —— 你的系统没装这个运行库,或者装了但位数不匹配。 为什么 phpEnv 会卡在 MySQL 启动这一步 phpEnv 是个轻量级本地环境套件,它不自带 MySQL 安装程序,而是直接解压预编译好的 MySQL zip 包(比如 mysql -5.7.x-winx64)。这类官方二进制包由 Visual Studio 2013 编译,强制依赖
msvcr120.dll
(C 运行时)和
msvcp120.dll
(C++ 运行时)。Windows 默认不带这两个文件,尤其干净安装的 Win10/Win11 或精简版系统。 即使你手动双击
mysqld.exe
,也会弹窗报错:“由于找不到
MSVCR120.dll
,无法继续执行代码” phpEnv 的启动脚本只是调用
mysqld --console
,底层失败,上层就显示“MySQL 打不开” 别试把 dll 文件丢进 phpEnv 目录或 MySQL
bin/
目录 —— Windows 加载顺序不认这个,必须注册到系统路径或安装运行库 该装哪个 VC++ 可再发行包 关键看你的 phpEnv 用的是 32 位还是 64 位 MySQL。绝大多数现代 phpEnv 集成包(如官网最新版、GitHub 上主流 fork)默认配的是
mysql-5.7.x-winx64
,所以你要装
vcredist_x64.exe
(VC++ 2013 Redistributable x64)。 确认方法:进 phpEnv 安装目录 →
mysql\bin\
→ 右键
mysqld.exe
→ “属性” → “详细信息” → 查看“文件版本”和“平台”字段,写的是
x64
就选 64 位安装包 下载地址必须是微软官方: https://www.php.cn/link/9eca6659a8b78c13386f85bb3fbb70a2 (2026 年仍有效) 不要下“微软常用运行库合集”,里面可能混入旧版或打包异常的组件,反而引发冲突 装完不用重启,但建议关掉所有命令行窗口再重试 phpEnv 启动 装了 vcredist 还是报错?检查三个盲区 常见于多环境共存或权限受限的机器,表面装成功,实际没生效: PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 立即学习 “ PHP免费学习笔记(深入) ”;
system32
和
SysWOW64
路径被策略锁定:某些企业版 Windows 或安全软件会拦截 dll 注册。打开管理员权限的 PowerShell,运行
Get-ChildItem C:\Windows\System32\msvcr120.dll -ErrorAction SilentlyContinue
,如果没输出,说明文件确实没落盘 同时存在多个 VC++ 2013 版本:比如你之前装过 VS2013 社区版,又装了独立 vcredist,可能版本号微小差异(如 12.0.30501 vs 12.0.40664)导致加载失败。用
Control Panel → 程序和功能
卸载所有带 “Microsoft Visual C++ 2013 Redistributable” 字样的条目,再干净重装 phpEnv 自带的 MySQL 初始化脚本出错:
mysqld --initialize
生成 data 目录失败后,后续
mysqld
启动会静默退出。检查 phpEnv 根目录下
mysql\data\
是否为空;若空,删掉整个
data
文件夹,再以管理员身份运行一次初始化命令 真正麻烦的不是找不到 dll,而是你装了 64 位 vcredist,却误用了 32 位 phpEnv 套件(或反过来)——这种位数错配不会报 dll 错误,而是直接闪退或日志里只有
mysqld got exception 0xc000007b
,得靠 Process Monitor 抓句柄才能定位。动手前先盯死 MySQL 的架构位数。

相关文章