环境:php8
冲突插件: 仿贴吧主题列表 2.20商业版 (chs_tiebalist) + 帖子列表显示评分 1.2.2 (freeaddon_forumdisplay_rate)
起因:当某个帖子评分了上传了图片,如果 仿贴吧主题列表插件 对这个帖子所在的板块功能关闭后,这个帖子所在板块的帖子列表页面就会报错:
原因:因为这两个插件都用到了对帖子列表的hook点(forumdisplay_thread_subject_output)设置,而 仿贴吧主题列表 插件的这个hook点设置因为对板块功能关闭后,代码返回的是 return; ,会进入 $_G['setting']['pluginhooks'][$hookkey] = ''; (source/function/function_core.php) 设置为空,导致下个循环处理 帖子列表显示评分 hook 之后,$_G['setting']['pluginhooks'][$hookkey][$k] = $v; 报错(PHP7 正常),$_G['setting']['pluginhooks'][$hookkey] 会取到空字符串,而又错误地在空字符串上使用数组索引下标赋值,导致报错;
解决思路:修正 仿帖子主题列表 这个插件的 forumdisplay_thread_subject_output 拦截点对关闭的板块,返回 空数组而不是空;
解决步骤:打开 /source/plugin/chs_tiebalist/chs_tiebalist.class.php 找到 forumdisplay_thread_subject_output ,下一句的 if (!$this->enabled) return; 改为 if (!$this->enabled) return array();
当然,如果想追求完美,那么这个php文件里其他hook拦截点也适当改掉这个不规范写法(因为没报错就懒得改其他地方了)
|