phpEnv下Redis扩展必须按当前激活PHP版本单独配置,否则php -m和phpinfo()均不可见;需通过phpenv current和php --ini确认路径,下载匹配TS/NTS及架构的php_redis.dll放入对应ext目录,并在该php.ini中添加extension=php_redis.dll,最后重启Apache并分别验证CLI与Web层。

phpEnv 是 Windows 下的多版本 PHP 环境管理工具,它不直接修改系统 PATH 或全局 php.ini,因此 Redis 扩展必须针对当前激活的 PHP 版本单独配置,否则 php -m 看不到 redis,phpinfo() 也查不到 —— 这是绝大多数失败的根本原因。
确认当前 phpEnv 激活的 PHP 版本和配置路径
phpEnv 会为每个 PHP 版本维护独立的 php.ini 和 ext 目录。不能凭感觉去 C:\php 或 XAMPP 下找文件。
- 打开命令行,执行
phpenv list查看已安装版本,再用phpenv current确认当前激活的是哪个(例如7.4.33) - 执行
php --ini,输出类似:Loaded Configuration File: C:\phpenv\versions\7.4.33\etc\php.ini
这个路径才是你唯一要编辑的php.ini - 对应的扩展目录是:
C:\phpenv\versions\7.4.33\ext,所有.dll文件必须放这里
下载匹配的 php_redis.dll(Windows 下最常踩的坑)
phpEnv 中的 PHP 是 VC 编译、TS/NTS、x86/x64 架构混合体,跟你的 Windows 系统位数完全无关 —— 只看 php -i | findstr "Architecture\|Thread Safety" 输出。
- 若显示
Architecture => x64且Thread Safety => enabled→ 下载php_redis-5.3.7-7.4-ts-vs16-x64.zip这类命名的 DLL - 若显示
Architecture => x86且Thread Safety => disabled→ 必须选 NTS + x86 版本,哪怕你用的是 Win10 64 位 - 下载源只认准两个:
https://windows.php.net/downloads/pecl/releases/redis/(官方归档)或https://pecl.php.net/package/redis(选 DLL List 标签页) - 解压后仅需把
php_redis.dll放入上一步确认的ext目录,.pdb文件可忽略
在 phpEnv 的 php.ini 中正确启用扩展
phpEnv 不共享 Apache 的配置,也不读取 Apache 自带的 php.ini;它通过 phpenv exec 注入环境变量来切换 PHP 实例,所以 Apache 必须加载 phpEnv 管理的 PHP 模块。
立即学习“PHP免费学习笔记(深入)”;
- 编辑
C:\phpenv\versions\7.4.33\etc\php.ini,在; Dynamic Extensions区域下方添加:extension=php_redis.dll - 不要加路径,PHP 会自动在
extension_dir指向的目录(通常是ext)里找 - 如果同时要用
igbinary(提升序列化性能),必须先加载:extension=php_igbinary.dllextension=php_redis.dll - 保存后,重启 Apache:不是
service httpd restart,而是用 phpEnv 命令:phpenv apache-restart(如无此命令,请手动停止再启动 Apache 服务)
验证是否真正生效(CLI 和 Web 必须分开测)
phpEnv 下 CLI 和 Web 使用的 PHP 实例可能不同,php -m 成功不代表网页能用 —— 因为 Apache 加载的是另一个 SAPI(如 php7apache2_4.dll)。
- CLI 验证:
php -m | findstr redis,有输出即 CLI 层 OK - Web 验证:写一个
test.php放到 Apache 文档根目录,内容为:<?php phpinfo(); ?>
浏览器访问,搜索redis,看到 “Redis Support => enabled” 才算 Apache 层真正连通 - 连接测试(避免空欢喜):
<?php<br>$redis = new Redis();<br>var_dump($redis->connect('127.0.0.1', 6379));<br>?>若返回bool(true),说明扩展+Redis server 全链路可用
最容易被忽略的是:phpEnv 切换版本后,Apache 不会自动 reload 对应的 PHP 模块,必须手动重启 Apache 并确认 phpinfo() 显示的 PHP 版本与 phpenv current 一致 —— 否则你调的永远是上一个版本的配置。



















