返回列表 发帖
查看: 338|回复: 6

[求助] DX3.4 报 Call to undefined method Redis::getMultiple() 无法开启redis扩展

21

主题

223

回帖

324

积分

炉火纯青

贡献
4 点
金币
20 个
发表于 2025-3-3 18:25:46 | 查看全部 |阅读模式

整不会了
系统Debian12和Ubantu22 搭 宝塔9.0.0和9.4.4
这个做实验的是全新的Discuz_X3.4_SC_UTF8_20230520版本

002.png
001.png

我知道答案 回答被采纳将会获得1 贡献 已有5人回答
回复

使用道具 举报

21

主题

223

回帖

324

积分

炉火纯青

贡献
4 点
金币
20 个
 楼主| 发表于 2025-3-3 18:37:06 | 查看全部
X3.5的 开始redis扩展 就一切正常

X34和X35在同一个站点内不同二级目录里
QQ截图20250303183337.png
PixPin_2025-03-03_18-36-17.png
回复

使用道具 举报

23

主题

5255

回帖

9386

积分

应用开发者

贡献
498 点
金币
1416 个
QQ
发表于 2025-3-3 20:51:04 | 查看全部
以下回答来自DeepSeek:




根据Discuz X3.4报错「Call to undefined method Redis::getMultiple()」的解决方案,结合Redis扩展安装和兼容性问题,整理以下解决步骤:

一、问题原因分析
  • 方法不存在:getMultiple()是Redis扩展旧版本的方法,在较新版本的PHPRedis扩展(如4.0+)中可能已被弃用或改名。
  • 扩展版本不兼容:Discuz X3.4可能依赖旧版Redis扩展接口,与当前安装的扩展版本存在兼容性问题。
  • 扩展未正确加载:Redis扩展或依赖的igbinary扩展未正确安装或配置。

二、解决方案步骤1:检查Redis扩展版本
  • 通过phpinfo()查看已安装的Redis扩展版本(搜索「redis」字段)。
  • 若版本≥4.0:需修改Discuz代码,将getMultiple()替换为mget()(新版本推荐方法)。// 原代码 $redis->getMultiple($keys);// 修改为$redis->mget($keys);
步骤2:安装兼容的Redis扩展
若需降级Redis扩展版本(例如适配PHP7):
  • Windows环境
    • 下载旧版扩展:访问 PECL Redis历史版本 ,选择如3.1.6版本(支持PHP7且含getMultiple方法)。
    • 替换文件:将php_redis.dll 和php_igbinary.dll 复制到PHP的ext目录,并在php.ini 中按顺序加载:extension=php_igbinary.dll  extension=php_redis.dll  ``` ```[9]()[11]()
  • Linux环境
    • 编译安装指定版本:pecl download redis-3.1.6 tar zxvf redis-3.1.6.tgz  cd redis-3.1.6 phpize && ./configure && make && make install ``` ```[7]()[9]()

步骤3:重启服务并验证
  • 重启Web服务(Apache/Nginx)和PHP-FPM。
  • 在phpinfo()页面确认Redis扩展已加载,并检查版本是否符合预期。
  • 在Discuz后台开启Redis缓存,测试功能是否正常。

三、其他注意事项
  • 依赖扩展优先级:igbinary扩展需在redis扩展之前加载,否则可能引发序列化问题。
  • Redis配置检查:确保Redis服务已启动,且Discuz的config_global.php 中配置了正确的Redis连接参数(端口、密码等)。
  • PHP线程安全版本:Windows环境下需注意选择TS(线程安全)或NTS扩展版本,与PHP主程序匹配。



回复

使用道具 举报

21

主题

223

回帖

324

积分

炉火纯青

贡献
4 点
金币
20 个
 楼主| 发表于 2025-3-3 22:55:44 | 查看全部
跟那几个AI玩了一天命了也没给个有效的方法

根据X3.4后台给错误日志:
Call to undefined method Redis::getMultiple()
PHP:
index.php#require(%s):0142
forum.php#discuz_application->discuz_application->init():0057
source/class/discuz/discuz_application.php#discuz_application->discuz_application->_init_setting():0067
source/class/discuz/discuz_application.php#loadcache():0732
source/function/function_core.php#table_common_syscache->table_common_syscache->fetch_all():0712
source/class/table/table_common_syscache.php#memory():0038
source/function/function_core.php#discuz_memory->discuz_memory->get():1733
source/class/discuz/discuz_memory.php#memory_driver_redis->memory_driver_redis->getMulti():0057
source/class/memory/memory_driver_redis.php#break():0067

对比了上面几个文件的 X34和X35内容几乎没区别
X35也是用的 getMultiple( 就可以正常开启扩展
而X34 用 getMultiple( 就没办法开启 扩展
换服务器之前是可以用的 运行环境和也是和现在的一样
回复

使用道具 举报

8

主题

460

回帖

589

积分

应用开发者

贡献
17 点
金币
13 个
QQ
发表于 2025-3-4 10:36:47 | 查看全部
感觉你的描述挺乱的。 同一个目录下的X34和x35,用php7应该不会有问题呀。分别用不同的域名就行了呀。配置文件不要用相同的前缀即可。注意:你的X34是大写的X。

我的网站也有x34和x35的,不过是不同的目录,不同的域名而已。后来x35用php8.1跑了。
回复

使用道具 举报

21

主题

223

回帖

324

积分

炉火纯青

贡献
4 点
金币
20 个
 楼主| 发表于 2025-3-4 13:19:59 | 查看全部
解决啊完了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 关注公众号
  • 有偿服务微信
  • 有偿服务QQ

手机版|小黑屋|Discuz! 官方交流社区 ( 皖ICP备16010102号 |皖公网安备34010302002376号 )|网站地图|star

GMT+8, 2025-4-30 18:03 , Processed in 0.078187 second(s), 11 queries , Redis On.

Powered by Discuz! W1.0 Licensed

Cpoyright © 2001-2025 Discuz! Team.

关灯 在本版发帖
有偿服务QQ
有偿服务微信
返回顶部
快速回复 返回顶部 返回列表