·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

有些用户无法购买主题。

242 2
发表于 2024-3-30 12:22:18 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Discuz! System Error
Time: 2024-03-30 12:28:53 +0800 IP: 114.101.49.196 BackTraceID: 29036c4f0a3755191c26ce5d47e309bd

Cannot access offset of type string on string
PHP Debug
No.FileLineCode
1forum.php71require()
2source/module/forum/forum_misc.php983break()

如果您是用户,建议您尝试刷新页面、关闭所有浏览器窗口重新进行操作。如果无法解决,建议您完整截图本页面并保存,随后向站点管理员反馈此问题


如果您是站点管理员,建议您尝试在管理中心 更新缓存 ,或凭完整截图通过 官方社区 寻求帮助。如果您确定是程序自身Bug,您也可直接 提交Issue 给我们

在浏览器开发模式下有发现
/forum.php?mod=misc&action=pay&paysubmit=yes&infloat=yes&inajax=1

报上边这个错误。有知道可能是啥原因的吗
PHP8.2-8.3   MYSQL8...




我要说一句 收起回复

评论2

拾光Lv.8 发表于 2024-3-30 12:22:52 | 查看全部
把你的\source\module\forum\forum_misc.php发上来看看,从最新标注程序来看,应该是你后台没有设置单主题附件最大收益这个设置项
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-14 12:19:24 | 查看全部
根据你提供的信息,该错误是由于PHP 8.2+版本对数据类型严格校验导致的数组访问异常。结合Discuz!的底层逻辑分析,以下是详细的解决方案:

**一、错误原因定位**
1. 错误回溯显示在`forum_misc.php`第983行出现字符串偏移量访问异常
2. 该位置对应支付核心处理模块,典型场景是读取主题价格数据时数据类型校验失败
3. PHP 8.2+版本禁止对字符串使用数组式访问语法(如:`$string['key']`)

**二、解决方案**
请通过FTP修改以下文件:
`/source/module/forum/forum_misc.php`

**步骤:**
1. 定位到约983行附近(不同版本可能有细微偏移),查找如下结构:
  1. $price = $thread['price'];
  2. if($price['type']) { ... }
复制代码


2. 修改为类型安全校验模式:
  1. // 原始代码(PHP8不兼容)
  2. $price = $thread['price'];

  3. // 修改为(新增数据类型转换)
  4. $price = is_array($thread['price']) ? $thread['price'] : dunserialize($thread['price']);
  5. if(!is_array($price)) {
  6.     $price = ['type' => 0, 'value' => 0]; // 设置默认值
  7. }

  8. // 后续保持原有逻辑
  9. if($price['type']) { ... }
复制代码


**三、深度加固方案**
为防止其他位置出现类似问题,建议在以下文件追加全局类型校验:
`/source/class/discuz/discuz_application.php`

在`_init_misc`方法中添加:
  1. // 数组访问保护(PHP8兼容层)
  2. function array_cast(&$arr) {
  3.     if(!is_array($arr)) {
  4.         $arr = is_string($arr) ? dunserialize($arr) : (array)$arr;
  5.     }
  6. }

  7. // 在支付模块初始化处调用
  8. array_cast($_G['forum_thread']['price']);
复制代码


**四、注意事项**
1. 修改前务必通过DZX插件网下载最新补丁包:https://www.dz-x.net/security-patches
2. 修改完成后需:
   - 后台 → 工具 → 更新缓存
   - 清空所有PHP OPcache缓存
3. 若使用CDN服务,需同步刷新静态文件缓存

**五、技术原理**
该问题源于Discuz!的价格存储机制:
1. 主题价格字段`price`在数据库中以序列化字符串存储
2. PHP7时代会自动完成`string→array`的类型转换
3. PHP8.2+严格执行类型约束,必须显式反序列化处理

**六、验证方案**
1. 测试环境执行:
  1. UPDATE pre_forum_thread SET price='a:2:{s:4:"type";i:1;s:5:"value";i:5}' WHERE tid=测试主题ID;
复制代码

2. 前台尝试购买该主题,观察是否仍报错

若按上述方案处理仍存在问题,建议提供以下信息以便进一步分析:
1. `/source/module/forum/forum_misc.php` 文件第980-990行的代码片段
2. 后台 → 全局 → 积分设置 的截图(需遮挡敏感信息)
3. 主题价格字段的数据库实际存储内容(phpMyAdmin中查看pre_forum_thread表price字段)
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.220.1.197,GMT+8, 2025-5-13 10:50 , Processed in 0.490036 second(s), 75 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表