phpEnv下Windows安装Memcached扩展需手动配置:先确认PHP版本、架构(x86/x64)及线程安全(TS/NTS),下载匹配的php_memcached.dll和libmemcached.dll,分别放入ext目录和系统PATH路径,修改php.ini启用扩展,最后用php --ri memcached和php -r "new Memcached();"验证。

phpEnv 是 Windows 下的 PHP 多版本环境管理工具,它本身不自带 Memcached 扩展,也不能直接安装 memcached.so(Linux 动态库),所以你不能像在 Linux 上那样用 phpize + configure 编译安装。Windows 下必须使用预编译的 .dll 文件,并确保与你的 PHP 架构(x86/x64)、线程安全(TS/NTS)和版本严格匹配。
确认 phpEnv 当前 PHP 版本和架构
这是最关键的一步,错配会导致 PHP Startup: Unable to load dynamic library 或直接启动失败。
- 打开终端,运行
php -v查看版本(如PHP 8.2.12) - 运行
php -i | findstr "Thread Safety"(Windows CMD)或php -i | grep "Thread Safety"(Git Bash),输出enabled表示 TS,disabled表示 NTS - 运行
php -i | findstr "Architecture"确认是x86还是x64 - phpEnv 的 PHP 通常位于
%USERPROFILE%\phpenv\versions\{version}\,比如C:\Users\Name\phpenv\versions\8.2.12\
下载并配置 memcached.dll
Windows 下没有 pecl install memcached,必须手动获取二进制文件:
- 去 https://www.php.cn/link/994a333e90d888a480e45e6e6e41707a 找对应版本(例如
3.2.0) - 进入子目录(如
3.2.0/php-8.2-nts-Win32-vs16-x64/),下载php_memcached.dll - 将该文件复制到 phpEnv 的
ext目录:%USERPROFILE%\phpenv\versions\8.2.12\ext\ - 编辑该 PHP 版本的
php.ini(路径通常是%USERPROFILE%\phpenv\versions\8.2.12\etc\php.ini),在;extension=区域末尾添加:extension=php_memcached.dll - 注意:不要加引号,也不要写成
extension=memcached—— Windows 下必须带完整文件名
安装 libmemcached.dll 依赖(否则 extension 加载失败)
PHP 的 memcached 扩展在 Windows 下依赖 libmemcached.dll,这个文件 phpEnv 不提供,必须单独放对位置:
立即学习“PHP免费学习笔记(深入)”;
- 从同个 PECL 页面下载对应架构的
libmemcached.dll(通常在同一个 ZIP 包里,或需从 vcpkg 构建) - 把它放到系统 PATH 路径下,推荐放在:
%USERPROFILE%\phpenv\versions\8.2.12\根目录(和php.exe同级) - 或者更稳妥:复制到
C:\Windows\System32\(x64 系统)或C:\Windows\SysWOW64\(x86 PHP)——但需管理员权限 - 验证方式:重启终端后运行
php --ri memcached,若报Unable to initialize module且提示找不到libmemcached.dll,说明依赖未就位
验证是否生效 & 常见错误
别急着写代码,先确认扩展真加载了:
- 执行
php -m | findstr memcached,有输出才表示启用成功 - 如果没输出,检查
php.ini路径是否正确(php --ini可确认)、extension_dir是否指向ext目录、DLL 文件名是否拼写错误 - 运行
php -r "new Memcached();",不报Class 'Memcached' not found才算通过 - 注意区分:
memcache(旧扩展,类名Memcache)和memcached(新扩展,类名Memcached)——phpEnv 默认应配后者 - 即使扩展加载成功,
new Memcached()后不调用addServer(),所有set()/get()都会静默返回false
最易被忽略的是 libmemcached.dll 的放置位置和架构匹配;很多用户卡在“扩展显示已加载,但 new Memcached() 就报错”,问题几乎全出在这里。Windows 下没有包管理器兜底,每个 DLL 都得亲手对齐。



















