⭐ 推荐:社区规则条款 V1.0

小皮面板如何安装和配置 memcached 扩展?

chinaz
chinaz 初级会员萌新站长
发布于 2026-10-15 15:08 ·1 浏览 ·3 回复
内容摘要

小皮面板安装 memcached 扩展需先装 memcached 服务端与 libmemcached 开发库,再为对应 PHP 版本编译安装 memcached.so,写入 php.ini 并重启验证;PHP 7/8 应选 memcache

结论:小皮面板安装 memcached 扩展的标准流程是三步:先在服务器装 memcached 服务端和 libmemcached 开发库,再给面板中对应 PHP 版本编译或安装 memcached.so,最后在 php.ini 写入 extension=memcached.so 并重启 PHP-FPM,用 php -m 或 phpinfo 验证。注意:memcached 和 memcache 不是同一个扩展,PHP 7/8 优先选 memcached。

memcached 和 memcache 扩展有什么区别?先选哪个?

结论:PHP 7/8 环境优先安装 memcached 扩展,不要装成旧的 memcache 扩展。memcached 扩展基于 libmemcached 库,支持更完整的 Memcached 协议、二进制协议、SASL 和较新 PHP 版本;memcache 扩展是旧一代实现,函数名也不同,例如 memcached 用 new Memcached(),memcache 用 memcache_connect()。两者不能互相替代,装了 memcache 不等于装了 memcached。

如果你在小皮面板的 PHP 扩展列表里看到的是“memcache”,那通常不是你要的。本文下面的操作都按 memcached 扩展处理。

小皮面板里怎么安装 memcached 服务端?

结论:memcached 扩展只是 PHP 客户端,真正提供缓存服务的是 memcached 服务端,必须先在系统里安装并启动,默认监听 127.0.0.1:11211。

CentOS / RHEL 系执行:

yum install -y memcached libmemcached libmemcached-devel gcc make autoconf
systemctl enable --now memcached

Ubuntu / Debian 系执行:

apt update
apt install -y memcached libmemcached-dev zlib1g-dev gcc make autoconf
systemctl enable --now memcached

安装后验证:

echo stats | nc 127.0.0.1 11211

如果返回 STAT 开头的统计信息,说明服务端正常。小皮面板主要负责网站、PHP、数据库等管理,memcached 服务端通常仍通过 SSH 用系统包管理器处理。

怎么给指定 PHP 版本安装 memcached 扩展?

结论:必须用小皮面板中对应 PHP 版本的 phpize 和 php-config 来编译,否则扩展会装到别的 PHP 版本上。小皮面板通常把 PHP 放在 /www/server/php/版本号 一类目录,具体以面板里“PHP 设置”显示的安装路径为准。

下面以 PHP 7.4、路径 /www/server/php/74 为例。先确认版本:

/www/server/php/74/bin/php -v

方式一:用 PECL 安装。先确保该 PHP 版本有 pecl:

/www/server/php/74/bin/pecl install memcached

安装过程中如果询问 libmemcached directory,填 /usr。

方式二:源码编译。适合面板没有 pecl 或需要指定版本的情况:

cd /tmp
wget https://pecl.php.net/get/memcached-3.2.0.tgz
tar -zxvf memcached-3.2.0.tgz
cd memcached-3.2.0
/www/server/php/74/bin/phpize
./configure --with-php-config=/www/server/php/74/bin/php-config --with-libmemcached-dir=/usr
make && make install

make install 完成后会输出 memcached.so 的路径。如果提示找不到 libmemcached,先确认 libmemcached-devel 或 libmemcached-dev 已安装,再重新 configure。

php.ini 怎么配置并重启生效?

结论:在对应 PHP 版本的 php.ini 中增加 extension=memcached.so,然后重启 PHP-FPM。如果 extension_dir 不匹配,直接写 memcached.so 的绝对路径。

编辑文件,例如:

vi /www/server/php/74/etc/php.ini

加入:

extension=memcached.so

保存后重启该 PHP 版本:

systemctl restart php-fpm-74

如果面板有“重启 PHP”按钮,也可以直接点对应版本重启。验证命令行:

/www/server/php/74/bin/php -m | grep memcached

Web 验证:在站点根目录建一个 info.php,内容为 <?php phpinfo();,通过 http://www.gj0.com/info.php 访问,搜索 memcached。注意 CLI 和 PHP-FPM 可能读取不同 php.ini,命令行有不一定代表 Web 有。

怎么测试 memcached 连接和排查常见故障?

结论:扩展加载成功后,用 PHP 脚本向 127.0.0.1:11211 写入再读取,能取到值就说明配置完成。

测试代码:

<?php
$m = new Memcached();
$m->addServer('127.0.0.1', 11211);
$m->set('test_key', 'ok', 60);
echo $m->get('test_key');

常见问题:php -m 没有 memcached,说明 php.ini 没写对或扩展未复制到 extension_dir;能加载但连接失败,检查 systemctl status memcached、11211 端口、防火墙和 SELinux;面板里 PHP 版本多,确认你改的是当前网站绑定的那个版本。需要远程连接时,改 /etc/sysconfig/memcached 或 /etc/memcached.conf 的监听地址,但公网环境不要直接暴露 11211,建议只允许内网 IP。

整体收束:小皮面板装 memcached 扩展的关键不是面板按钮,而是“服务端 + libmemcached + 对应 PHP 版本编译 + php.ini 启用 + 重启验证”这条链路。按 PHP 版本操作,别把 memcached 和 memcache 混用,基本一次就能配通。

本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-2114.html
转载请注明出处,版权归原作者所有。
—/ 5暂无评分
还没有评分,来打第一分吧

全部回复 3

juming
juming 初级会员萌新站长 1楼 2026-10-15 15:27

帖子正好断在 pecl 交互那一步,我把它补完:询问 Enable memcached SASL support? [no] 时一般直接回车选 no,除非你确实要在服务端配 SASL 认证;接着问 libmemcached directory [default] 也直接回车,让它用系统默认路径。编译完成后 pecl 会提示你手动加 extension=memcached.so,这一步别漏。

php.ini 要认准是面板里当前 PHP 版本的那份,通常在该版本的 etc 目录下(如 /www/server/php/74/etc/php.ini),路径以面板 PHP 设置页显示的为准。写完在面板点重启对应的 PHP-FPM,SSH 下的服务名各环境不一样,不确定就用面板按钮。不想用 pecl 的话,下载对应 PHP 版本的 memcached 源码,用该版本的 phpize 和 --with-php-config=/www/server/php/74/bin/php-config 编译安装,效果一样。

验证时注意 CLI 和 FPM 可能读不同的 ini:/www/server/php/74/bin/php -m | grep memcached 通过,只说明 CLI 加载了,最稳妥还是丢一个 phpinfo 页面看 FPM 里有没有 memcached 段。

常见的坑有两个:一是本地连不上,先确认改的是 127.0.0.1 而不是 localhost(后者可能走 IPv6 或 socket),再用 echo stats | nc 127.0.0.1 11211 确认服务端活着;二是千万别为了省事把 -l 改成 0.0.0.0 直接暴露到公网,11211 无认证被人刷成肉鸡的案例太多了,需要外网访问就加防火墙白名单。

lqyyzz
lqyyzz 观望站长 #1922 2楼 2026-10-15 15:40
juming:帖子正好断在 pecl 交互那一步,我把它补完:询问 `Enable memcached SASL support? [no]` 时一般直接回车选 no,除非你…

juming 这段补得挺完整,我就在他基础上补三个容易翻车的点,都是实测踩过的。

第一,版本匹配。PHP 8.2/8.3 必须用 memcached 3.2.x,PHP 8.0/8.1 用 3.1.5 以上,装老版本编译时会直接报头文件找不到(类似 php_smart_string.h 那类错误)。所以别裸跑 pecl install memcached,稳妥点写成 pecl install memcached-3.2.0,装完后悔可比重新编译轻松。

第二,extension_dir 和 ini 写入位置。pecl 编出来的 so 一般在 $(php-config --extension-dir) 下,如果面板某个 PHP 的 ini 里没配 extension_dir 或指向了别处,光写 extension=memcached.so 会静默加载失败——FPM 日志里不一定报,phpinfo 里就是没有。建议用绝对路径写 extension=/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/memcached.so,最保险。

第三,既然服务端都装好了,顺手把 session 也接上会更值:在同一个 php.ini 里设 session.save_handler = memcached、session.save_path = "127.0.0.1:11211",多机共享登录态很省事。但注意 memcached 重启或内存淘汰会掉会话,登录态要求严格的站点别这么干。

另外补一句服务端侧:-m 内存和 -c 连接数默认分别是 64M 和 1024,站点并发一上来就得调,改 /etc/sysconfig/memcached(RHEL 系)或 /etc/memcached.conf(Debian 系)后重启服务,别等 OOM 了才回头查。

周末
周末 萌新站长 #1924 3楼 2026-10-15 15:52
lqyyzz:juming 这段补得挺完整,我就在他基础上补三个容易翻车的点,都是实测踩过的。 第一,版本匹配。PHP 8.2/8.3 必须用 memcached 3.2.…

你这三点基本把常见坑覆盖了,我在编译交互和验证这两块再补几个细节,都是装残废版本后回头查才发现的地方。

pecl install memcached 交互过程中会连问几个问题,答错就直接装出个半残版本:libmemcached directory 默认是 no,如果你是用源码编译的 libmemcached,这里必须填绝对路径;Enable memcached SASL support? 只有走 SASL 认证的集群才填 yes,普通本地缓存填 no;Enable memcached session support? 要用 session 就填 yes。装完用 php --ri memcached 看一眼,Memcached Support、Session Support、SASL Support 三行是不是都 enabled,比 php -m 信息全得多,还能顺带看到编进去的 libmemcached 版本号。

验证这块提醒一下:php -m 走的是 CLI 的 ini,小皮面板里 CLI 和 FPM 未必读同一个文件,所以最稳的还是丢个 <?php phpinfo(); 页面看 FPM 那份实际加载路径,或者 php-fpm -i | grep "Loaded Configuration" 对一下。

session 那条我再补一个纠正:memcached 扩展的前缀其实可配,memcached.sess_prefix 默认是 memc.sess.key.。同一个实例上跑多个站时给每个站写不同的前缀,就能避免 session id 撞车串号,比拆多个实例省事。至于存 session 掉登录态,本质是 memcached 的 LRU 淘汰,跟重启一样无解,能接受再上。