FrankenPHP 默认不包含 Redis 扩展,必须通过源码编译并添加 redis 构建标签来静态集成;需先安装 hiredis 开发包,再执行 make BUILD_FLAGS="-tags=sqlite_omit_load_extension,redis" 构建,验证方式为 new Redis() 实例化成功。

FrankenPHP 默认不带 redis.so,得手动加
FrankenPHP 是基于 PHP 的 SAPI(不是传统 FPM 或 CLI),它把 PHP 编译进 Web 服务器二进制里,所以扩展不是靠 extension=redis.so 动态加载的——那些 .so 文件根本不会被识别。你不能像在 Apache 或 Nginx + PHP-FPM 环境里那样改 php.ini 就完事。
用 --with-redis 编译 FrankenPHP 源码是唯一可靠方式
官方不提供预编译的带 Redis 支持的 FrankenPHP 二进制,必须自己从源码构建。核心是让 PHP 构建阶段启用 redis 扩展模块,并确保它被静态链接进最终的 frankenphp 可执行文件中。
- 先确认已安装 Redis 开发头文件:
libhiredis-dev(Debian/Ubuntu)或hiredis-devel(CentOS/RHEL/Fedora) - 克隆 FrankenPHP 仓库:
git clone https://github.com/dunglas/frankenphp.git - 进入目录后,设置构建参数:
make BUILD_FLAGS="-tags=sqlite_omit_load_extension,redis"—— 注意redis这个 tag 是关键,它会触发 PHP 构建时启用--with-redis - 如果系统没有
hiredis,构建会失败并报错hiredis.h: No such file or directory,此时要先装依赖再重试
验证 redis 类是否可用,别信 phpinfo()
phpinfo() 在 FrankenPHP 里可能不显示扩展列表(尤其静态链接后),最直接的验证方式是写一行代码跑起来:
$r = new Redis(); var_dump($r instanceof Redis); // 应该输出 bool(true)
如果报 Class 'Redis' not found,说明构建没成功或 tag 没生效;如果连接失败(如 Connection refused),那是 Redis 服务本身没跑,跟扩展无关。
立即学习“PHP免费学习笔记(深入)”;
别试图复制 redis.so 或改 extension_dir
FrankenPHP 不读取 extension_dir,也不支持 dlopen() 加载外部 so。你往 php.ini 里加 extension=redis.so、或者把 redis.so 放到任何路径下,都完全无效。这种做法只会浪费时间,还可能因配置冲突导致启动失败。



















