windows下xampp配置memcached需严格匹配php_memcache.dll与php环境(vc版本、ts/nts、位数),正确安装memcached.exe服务,修改对应php.ini启用扩展,重启apache,并用new memcache()测试连接与读写。

Windows 下 XAMPP 配置 Memcached 不能只靠“启用扩展”就完事,php_memcache.dll 和 memcached.exe 必须严格匹配你的 PHP 编译环境(VC 版本、TS/NTS、位数),否则 phpinfo() 里永远看不到 memcache 模块,new Memcache() 会直接报类未定义。
确认 PHP 环境细节再下载 dll
打开 http://127.0.0.1/phpinfo(),重点看三行:
-
PHP Version:比如7.4.33 -
Thread Safety:显示enabled就是 TS,disabled是 NTS -
Compiler:比如MSVC15 (Visual C++ 2019)或旧版的MSVC14/MSVC11
这些决定了你该去哪下 php_memcache.dll —— 官方 PECL 已停止维护 Windows 二进制包,必须从可信第三方归档站(如 pecl.php.net/package/memcache/3.0.8/windows)找对应组合的 dll。常见坑:
- PHP 7.4 VC15 TS → 要
php_memcache-3.0.8-7.4-ts-vc15-x64.dll - PHP 8.0+ 不再支持
memcache扩展(只有memcached,需 libmemcached 依赖) - 把 32 位 dll 放进 64 位 PHP 的
ext/目录,Apache 启动会静默失败
memcached.exe 服务安装常卡在权限和端口
memcached.exe 不是双击运行的程序,必须用管理员权限的命令行操作:
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 以管理员身份运行
cmd,cd 到memcached.exe所在目录(如D:\memcached) - 执行
memcached.exe -d install,若提示 “service already exists”,先运行memcached.exe -d uninstall - 启动后检查端口是否真被占用:
netstat -ano | findstr :11211,有 PID 才算活 - 别用
telnet 127.0.0.1 11211测试——它只验证端口通不通,不验证协议是否响应;真正有效的是用 PHP 连:$m = new Memcache(); $m->connect('127.0.0.1', 11211);
php.ini 配置位置和顺序很关键
XAMPP 可能有多个 php.ini:Apache 用的是 \xampp\apache\bin\php.ini,CLI 用的是 \xampp\php\php.ini。配置必须写在 Apache 对应的那个文件里:
- 在
extension=区块末尾添加extension=php_memcache.dll(不要带路径,dll 必须在ext/目录) -
[Memcache]段落可选,但memcache.default_port = 11211建议显式写上,避免硬编码端口不一致 - 改完必须重启 Apache(不是只刷新页面),且要确认 Apache 启动日志里没报
PHP Warning: PHP Startup: Unable to load dynamic library
测试代码要区分 memcache 和 memcached 扩展
很多人卡在测试环节,是因为混淆了两个不同扩展:
-
memcache(旧版,类名Memcache,无 SASL 认证,仅支持文本协议)→ 用new Memcache() -
memcached(新版,类名Memcached,支持二进制协议/SASL,性能更好)→ 用new Memcached()
如果你装的是 php_memcache.dll,下面这段才是有效测试:
<?php $m = new Memcache();
if ($m->connect('127.0.0.1', 11211)) {
$m->set('test_key', 'This is a test!', 0, 60);
echo $m->get('test_key');
} else {
echo 'Connection failed';
}
?>
输出 This is a test! 才算真正跑通。最常被忽略的是:XAMPP 自带的 phpinfo() 页面缓存可能没刷新,务必强制 Ctrl+F5,或改个 URL 参数再访问。










