phpenv环境下必须手动编译安装memcached扩展:先源码编译libmemcached并指定prefix,再用pecl install memcached时显式传入--with-libmemcached-dir参数,最后在当前php版本的php.ini中添加extension=memcached并验证加载。

phpEnv 环境下不能直接用 apt 或 dnf 装 php-memcached,必须手动编译,否则会报 Class 'Memcached' not found 或扩展加载失败。
确认 phpEnv 的 PHP 安装路径和版本
phpEnv 是多版本 PHP 共存管理工具,每个版本独立编译,扩展也必须对应编译。先查清楚当前激活的 PHP 版本和路径:
- 运行
phpenv version看当前版本(如8.1.25) - 运行
which php和which php-config,通常指向类似~/.phpenv/versions/8.1.25/bin/php和~/.phpenv/versions/8.1.25/bin/php-config - 运行
php -v和php-config --version确保二者一致;不一致说明环境变量混乱,需重新phpenv rehash
安装 libmemcached 依赖(不能跳过)
phpEnv 下的 memcached 扩展依赖 libmemcached C 库,系统包管理器装的往往路径不对或版本冲突,必须源码编译并指定 prefix:
- 下载并解压
libmemcached(推荐 1.0.18 或 1.1.4,避免新版 ABI 不兼容):wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz - 编译安装到统一前缀(例如
/usr/local/libmemcached-1.0.18):./configure --prefix=/usr/local/libmemcached-1.0.18 --with-memcachedmake && sudo make install - 验证:
ls /usr/local/libmemcached-1.0.18/lib/libmemcached.so*存在才继续 - 注意:不要用
libmemcached-dev包——它可能装在/usr/lib/x86_64-linux-gnu/,而 phpEnv 编译时找不到
用 pecl 安装 memcached 扩展(指定 libmemcached 路径)
直接 pecl install memcached 会失败,因为找不到 libmemcached 头文件和库。必须显式传参:
- 先确保已激活目标 PHP 版本:
phpenv local 8.1.25 - 运行:
pecl install memcached
当提示"libmemcached directory [no] :"时,输入:/usr/local/libmemcached-1.0.18 - 如果 pecl 报错说找不到
phpize,就手动调用:~/.phpenv/versions/8.1.25/bin/phpize
再执行:./configure --with-php-config=~/.phpenv/versions/8.1.25/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached-1.0.18 - 成功后会输出
.so文件路径,例如:Installing shared extensions: /home/user/.phpenv/versions/8.1.25/lib/php/extensions/no-debug-non-zts-20210902/
启用扩展并验证是否生效
phpEnv 不会自动修改 php.ini,需手动配置,且注意是「当前版本」的 ini 文件:
- 找到当前 PHP 版本的配置目录:
php --ini→ 查看Loaded Configuration File,通常是~/.phpenv/versions/8.1.25/etc/php.ini - 在该
php.ini末尾添加:extension=memcached
(不是memcached.so,phpEnv 下 .so 后缀可省略) - 重启 CLI 或 Web 服务(如用 php-fpm,则 reload
php-fpm;CLI 直接重跑命令即可) - 验证:
php -m | grep memcached→ 应输出memcachedphp -r "new Memcached(); echo 'OK';"→ 应输出OK,无 fatal error - 常见坑:
phpinfo()显示的Loaded Configuration File和你编辑的不是同一个;php -i | grep ini比php --ini更准
最易被忽略的是:phpEnv 每个 PHP 版本都有独立的 php.ini 和扩展目录,切勿复用其他版本的 .so 文件,也别漏掉 --with-libmemcached-dir 参数——缺了它,addServer() 可能静默失败,getVersion() 返回空数组,但不报错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











