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

XAMPP 里配 Memcached 不是启用一个扩展就完事——php_memcache.dll 和 memcached.exe 必须与你的 PHP 编译环境(VC 版本、TS/NTS、位数)完全一致,否则 new Memcache() 会直接报类未定义,phpinfo() 也压根不显示模块。
确认 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
这些组合决定了你该下哪个 dll。例如:
- PHP 7.4 + VC15 + TS + x64 → 要
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 不是双击运行的程序,也不能靠“启动图标”或“桌面快捷方式”来跑。
- 以管理员身份打开命令行,
cd到memcached.exe所在目录 - 执行
memcached.exe -d install;若提示 “service already exists”,先运行memcached.exe -d uninstall - 启动服务:
memcached.exe -d start - 验证是否真在监听:
netstat -ano | findstr :11211—— 有 PID 才算活;telnet 127.0.0.1 11211只验端口通不通,不验协议响应,不可靠
php.ini 配置位置和 extension 加载顺序很关键
XAMPP 有两个常见 php.ini:Apache 用的是 \xampp\apache\bin\php.ini,CLI 用的是 \xampp\php\php.ini。你改错文件,等于没改。
- 在
phpinfo()页面顶部找 “Loaded Configuration File”,看它实际加载的是哪一个 - 在该文件的
extension=区块末尾添加extension=php_memcache.dll(不要带路径,dll 必须放在ext/目录下) - 可选但建议加:
[Memcache]段落,并显式写memcache.default_port = 11211,避免代码里硬编码端口和配置不一致 - 改完必须重启 Apache(不是刷新页面),并检查 Apache 启动日志里有没有
PHP Warning: PHP Startup: Unable to load dynamic library
测试必须用 new Memcache(),别混淆 memcache 和 memcached 扩展
很多人卡在最后一步,是因为写了 new Memcached() 却装的是 memcache 扩展(或反过来)。
-
memcache(旧版,类名Memcache):无需 libmemcached,仅支持文本协议,用new Memcache() -
memcached(新版,类名Memcached):需 libmemcached 依赖,支持二进制协议和 SASL 认证,XAMPP 默认不兼容 - 测试代码示例(必须放在 Web 请求上下文中,不能只 CLI 运行):
$m = new Memcache();
$m->connect('127.0.0.1', 11211);
$m->set('test_key', 'hello world', 0, 30);
var_dump($m->get('test_key'));
如果 connect() 报错或 set() 返回 false,优先查端口监听状态和 dll 匹配性,而不是怀疑代码逻辑。











