XAMPP中应优先使用memcache扩展(非memcached),因其无需libmemcached、兼容性好;phpize报错因XAMPP未附带php.h等开发头文件,强行编译易致ABI不匹配崩溃;正确做法是选用与PHP版本、架构、ZTS严格匹配的预编译memcache.so或php_memcache.dll,并确保php.ini路径正确、权限合适、服务以正确用户运行且配置生效。

在 XAMPP 环境中,memcache(注意不是 memcached)扩展才是能直接配合默认 PHP 构建方式工作的缓存客户端——它不依赖 libmemcached,编译门槛低、兼容性好;而 memcached 扩展需要额外安装 libmemcached-dev 并手动指定路径,XAMPP 自带的 PHP 编译环境通常缺失对应头文件,极易报错 php.h: No such file or directory。
为什么 phpize 总提示找不到 php.h
XAMPP 的 PHP 是预编译二进制包,没附带开发头文件(php.h、zend_modules.h 等)。直接运行 /opt/lampp/bin/phpize 会失败,因为 phpize 需要这些文件生成 configure 脚本。
- 不要尝试下载完整 PHP 源码并硬链接头文件——XAMPP 的 PHP 构建参数(ZTS/NTS、debug/non-debug)和 ABI 版本必须严格匹配,否则
memcache.so加载时会报undefined symbol或直接 segfault - 最稳妥的解法:改用 Windows 下的
php_memcache.dll或 Linux 下已编译好的memcache.so(需确认与你的 XAMPP PHP 版本、架构完全一致) - 若坚持源码编译,必须用和 XAMPP 同版本、同配置(尤其是
--enable-zts是否开启)的 PHP 源码重新编译一次phpize工具,再用它处理 memcache 扩展
extension=memcache.so 加载失败的常见原因
即使 .so 文件放对位置,PHP 启动时仍可能静默跳过该扩展,或报 Unable to load dynamic library。
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
- 路径错误:
memcache.so必须放在/opt/lampp/lib/php/extensions/no-debug-zts-XXXXXXX/目录下(Linux)或xampp/php/ext/(Windows),目录名中的zts表示线程安全,XAMPP 默认启用 ZTS - 权限问题:Linux 下确保
memcache.so对daemon用户(Apache 进程用户)可读,chmod 755比644更稳妥 - 依赖缺失:
ldd memcache.so查看是否链接了libevent或其他系统库——XAMPP 的 PHP 扩展应尽量静态链接或仅依赖 glibc,避免引入外部动态库 - 扩展名混淆:确认你加的是
memcache.so(旧版扩展),不是memcached.so(新版,不兼容Memcache类)
启动 Memcached 服务时端口被占用或无法监听
XAMPP 自带的 MySQL 和 Apache 占用 3306 / 80 / 443,但 Memcached 默认端口 11211 通常空闲。真正容易出问题的是绑定地址和用户权限。
- Linux 下若用
root启动:/opt/lampp/bin/memcached -d -m 64 -p 11211 -u daemon -l 127.0.0.1 -c 1024,必须指定-u daemon(XAMPP Apache 默认运行用户),否则进程可能因权限过高被 systemd 或 SELinux 拦截 - Windows 下用
memcached.exe -d install注册服务后,务必检查 Windows 服务管理器里该服务的“登录身份”是否为 Local System,否则可能无法访问网络栈 - 测试连通性别只靠
telnet 127.0.0.1 11211,要实际执行stats命令:echo "stats" | nc 127.0.0.1 11211,返回一堆 key/value 才算真正就绪
最常被忽略的一点:XAMPP 的 php.ini 有两个——Apache 用的是 /opt/lampp/etc/php.ini(Linux)或 xampp/php/php.ini(Windows),而 CLI 模式用的是另一个。修改完必须重启整个 XAMPP(sudo /opt/lampp/lampp restart),不能只重启 Apache;且 phpinfo() 页面必须通过浏览器访问 http://localhost,而非命令行运行 php -i,否则看到的不是同一份配置。


















