php的memcached扩展必须依赖libmemcached且abi版本严格匹配,否则php -m不可见、extension=memcached.so静默失效;configure报“sasl.h not available”因新版libmemcached默认启用sasl,应加--disable-memcached-sasl并确保libmemcached编译时含--with-memcached以生成正确头文件。

直接说结论:PHP 的 memcached 扩展不能跳过 libmemcached 单独安装,且必须匹配 PHP 版本 ABI(比如 no-debug-zts-20131226 这类后缀),否则 php -m 看不到、extension=memcached.so 会静默失败。
为什么 configure 报错 “sasl.h is not available”
这是最常卡住的第一步。新版 libmemcached 默认启用 SASL 认证支持,但多数生产环境不需要,且系统往往没装 libsasl2-dev(Ubuntu/Debian)或 cyrus-sasl-devel(CentOS/RHEL)。
- 不要硬装 sasl 开发包——除非你真要用 SASL 连接带认证的 Memcached 集群
- 编译
memcached扩展时,必须加--disable-memcached-sasl - 如果已运行过
./configure失败,先make clean再重来,否则缓存的 config.status 可能复用旧参数 - 某些老版本(如 memcached-2.2.0)的
configure脚本对--disable-memcached-sasl解析不稳,建议升级到memcached-3.2.0+(PECL 最新稳定版)
libmemcached 编译时 --with-memcached 参数不是可选的
这个参数控制是否编译客户端工具(如 memcapable、memstat),但它也影响头文件生成路径和部分结构体定义。漏掉会导致后续 PHP 扩展编译时找不到 memcached.h 或类型不匹配。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
-
./configure --prefix=/usr/local/libmemcached --with-memcached是最小安全组合 - 不要用
--without-memcached——即使你只想要库,它也会删掉关键头文件 - 安装完检查:
ls /usr/local/libmemcached/include/libmemcached/ | grep memcached.h,必须存在 - 如果
make install后发现include/libmemcached/memcached.h是空的或损坏,大概率是--with-memcached没生效,重装
PHP 扩展加载失败的三个隐蔽原因
extension=memcached.so 写进 php.ini 后 php -m 不显示,不报错,是最让人抓狂的情况。
-
memcached.so路径写错:用make install输出的最后一行确认真实路径,比如/usr/local/php/lib/php/extensions/no-debug-zts-20131226/memcached.so,别手输 - PHP CLI 和 Web SAPI 加载不同 ini 文件:用
php --ini看 CLI 用哪个,用phpinfo()页面看 Apache/Nginx 用哪个,两个都得加 - 依赖库未被动态链接器识别:运行
ldd /usr/local/php/lib/php/extensions/no-debug-zts-20131226/memcached.so | grep libmemcached,若显示not found,需执行:echo "/usr/local/libmemcached/lib" >> /etc/ld.so.conf.d/libmemcached.conf && ldconfig
memcache vs memcached:别混用
这两个扩展名字像、功能重叠,但底层完全不兼容:memcache 是纯 PHP 实现,不依赖 libmemcached;memcached 是 C 扩展,基于 libmemcached,支持 CAS、Binary Protocol、SASL 等高级特性。
- 如果你需要
cas()、getDelayed()、连接池或一致性哈希,必须用memcached -
memcache扩展的Memcache::connect()默认不支持超时重试,而Memcached::addServers()支持自动 failover - 共存没问题,但别在代码里混用类名:一个是
Memcache,一个是Memcached,大小写和行为都不同 - 新版 PHP(8.0+)中
memcache已停止维护,memcached是唯一推荐路径
真正麻烦的从来不是命令敲几遍,而是 libmemcached 安装路径没被 ldconfig 刷新、php.ini 被多个进程读错位置、或者扩展 ABI 后缀和当前 PHP 不匹配——这些都不会报明显错误,只会让 extension= 彻底失效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










