PHP 8.3 原生支持 Redis,但需严格匹配 ABI、VC17 编译器、TS/NTS 线程模型及 x64 架构;Windows 下 redis.dll 必须含 vs17 标识、命名为 redis.dll、依赖 vcruntime140_1.dll;Linux 需用 php-config8.3 编译,extension_dir 必须为绝对路径且与 ABI 目录(20230817)一致,启用 extension=redis 并通过 php --ri redis 验证版本 ≥6.0.0。

PHP 8.3 原生支持 Redis,但「支持」不等于「开箱即用」——扩展必须严格匹配 ABI、编译器(VC17 / GCC 13)、线程模型(TS/NTS)和架构(x64),否则 extension=redis 会静默失败或报 module_not_found。
Windows 下 redis.dll 加载失败的三个硬性条件
PHP 8.3 for Windows 全部由 VS2022(VC17)编译,因此 redis.dll 必须满足以下全部条件,缺一不可:
-
php -v输出中必须含VC17字样;若显示VC16或无此标识,说明你用的是旧版 PHP 包,不能用于 8.3 - 下载的 ZIP 包名必须包含
vs17(如redis-5.3.7-8.3-nts-vs17-x64.zip),vs16或mingw编译的 DLL 一律拒载 - DLL 文件名必须是
redis.dll,不是php_redis.dll;PHP 8.3 会直接跳过带php_前缀的文件 - 用
Dependencies工具打开redis.dll,确认依赖项里有vcruntime140_1.dll和msvcp140.dll;缺失需安装 Microsoft Visual C++ 2022 Redistributable (x64)
Linux 下 pecl install redis 失败的常见断点
PECL 官方尚未为 PHP 8.3 提供预编译包,pecl install redis 实际是本地编译,极易卡在头文件或链接阶段:
- 必须先装
php-dev(Ubuntu/Debian)或php-devel(RHEL/CentOS),否则phpize找不到php.h - 运行
pecl install redis前,确认php-config是 8.3 版本:/usr/bin/php-config8.3;若系统默认是 8.2,需加--with-php-config=/usr/bin/php-config8.3 - 编译成功后生成的
redis.so路径,必须与php -i | grep extension_dir输出一致;常见错误是它被装到/usr/lib/php/20220829/(对应 PHP 8.2),而 PHP 8.3 的 ABI 目录是20230817 - 加载时报
undefined symbol: zend_string_release_ex,说明扩展是用旧版 PHP 头文件编译的,需清空./configure缓存并重来
extension_dir 和启用方式的路径陷阱
PHP 8.3 不再容忍模糊路径写法,相对路径或目录混用会导致扩展完全不识别:
立即学习“PHP免费学习笔记(深入)”;
-
extension_dir必须写绝对路径,例如extension_dir = "/usr/lib/php/20230817";写成"ext"或"./ext"在 PHPStudy、XAMPP 等环境大概率解析失败 - NTS 和 TS 版本的扩展目录绝对不可混用:PHP 8.3 NTS 用
php8.3.0-nts/ext/,TS 用php8.3.0-ts/ext/;放错位置会触发错误码0x7e - 启用扩展时只写
extension=redis(不带后缀),且该行不能重复;同时存在extension=redis和extension=redis.so会导致其中一个被忽略 - CLI 和 FPM 的
php.ini是两个文件,需分别修改;用php --ini和php-fpm -i | grep "Loaded Configuration File"分别确认路径
最易被忽略的一点:即使 php -m | grep redis 显示已加载,也不代表能用。必须执行 php --ri redis 查看输出中是否有 Redis Support => enabled 和 Version => 6.0.0+ —— 低于 6.0.0 的版本在 PHP 8.3 下类注册会失败,new Redis() 报 Class 'Redis' not found。



















