返回列表 发帖
查看: 238|回复: 8

[求助] Discuz! X 升级Discuz! X5.0 问题

3

主题

23

回帖

2

粉丝

初学乍练

贡献
0 点
金币
15 个
QQ
发表于 4 天前 |中国| 查看全部 |阅读模式
卡在这里不知道什么原因
卡在这里不知道什么原因
我知道答案 回答被采纳将会获得1 贡献 已有8人回答
回复

使用道具 举报

15

主题

3670

回帖

5

粉丝

应用开发者

贡献
433 点
金币
172 个
QQ
发表于 4 天前 |河南| 查看全部
刷新 试试呢;  进后台, 数据库校验 试试, 看 表结构 是否正常,

如果表结构正常 就说明是升级成功了
回复

使用道具 举报

3

主题

23

回帖

2

粉丝

初学乍练

贡献
0 点
金币
15 个
QQ
 楼主| 发表于 4 天前 |中国| 查看全部
数据库校验 正常,前台显示错误
截图202604051716391293.jpg
回复

使用道具 举报

6

主题

1638

回帖

4

粉丝

应用开发者

贡献
44 点
金币
180 个
产品版本
X5.0+
QQ
发表于 4 天前 |浙江| 查看全部
关闭插件,切换默认是否会出现
回复

使用道具 举报

3

主题

23

回帖

2

粉丝

初学乍练

贡献
0 点
金币
15 个
QQ
 楼主| 发表于 4 天前 |中国| 查看全部
鸿茂传媒 发表于 2026-4-5 19:51
关闭插件,切换默认是否会出现

所有插件都是关闭了的
回复

使用道具 举报

96

主题

608

回帖

19

粉丝

管理员

贡献
27 点
金币
67 个
产品版本
X5.0+
发表于 4 天前 |北京来自手机 | 查看全部
龙龙 发表于 2026-4-5 17:17
数据库校验 正常,前台显示错误
后台域名相关的配置重新配一下。
回复

使用道具 举报

36

主题

92

回帖

3

粉丝

渐入佳境

贡献
0 点
金币
12 个
发表于 3 天前 |广东| 查看全部
本地反复测试过多次,每次都出现这样的问题,数据库大概3G多,红色后宝塔面板显示数据有写入,写入几分钟后就没数据写入了。得不断多次刷新才会继续下去,但是这样刷新继续下次到升级成功数据出来都是错误的。
回复

使用道具 举报

46

主题

3330

回帖

10

粉丝

应用开发者

Discuz! 运维

贡献
224 点
金币
685 个
QQ
发表于 前天 09:45 |江苏| 查看全部
回复

使用道具 举报

3

主题

23

回帖

2

粉丝

初学乍练

贡献
0 点
金币
15 个
QQ
 楼主| 发表于 昨天 01:27 |中国| 查看全部
\source\function\cache\cache_setting.php

### 修复 1:第 77-99 行(profilegroup 配置处理)
修复前:

```
} elseif($setting['skey'] == 
'profilegroup') {
    $profile_settings = 
    table_common_member_profile_sett
    ing::t()->fetch_all_by_available
    (1);
    foreach($setting['svalue'] as 
    $key => $val) {
        $temp = [];
        if(!empty($val['field']) && 
        is_array($val['field'])) {
            foreach
            ($profile_settings as 
            $pval) {
                if(in_array($pval
                ['fieldid'], $val
                ['field'])) {
                    $temp[$pval
                    ['fieldid']] = 
                    $pval
                    ['fieldid'];
                }
            }
            foreach($val['field'] 
            as $fieldid) {
                if(!in_array
                ($fieldid, $temp)) {
                    $temp[$fieldid] 
                    = $fieldid;
                }
            }
        }
        $setting['svalue'][$key]
        ['field'] = $temp;
    }
    table_common_setting::t()
    ->update_setting
    ('profilegroup', $setting
    ['svalue']);
}
```
修复后:

```
} elseif($setting['skey'] == 
'profilegroup') {
    if(!is_array($setting
    ['svalue'])) {
        $setting['svalue'] = [];
    }
    $profile_settings = 
    table_common_member_profile_sett
    ing::t()->fetch_all_by_available
    (1);
    foreach($setting['svalue'] as 
    $key => $val) {
        $temp = [];
        if(!empty($val['field']) && 
        is_array($val['field'])) {
            foreach
            ($profile_settings as 
            $pval) {
                if(in_array($pval
                ['fieldid'], $val
                ['field'])) {
                    $temp[$pval
                    ['fieldid']] = 
                    $pval
                    ['fieldid'];
                }
            }
            foreach($val['field'] 
            as $fieldid) {
                if(!in_array
                ($fieldid, $temp)) {
                    $temp[$fieldid] 
                    = $fieldid;
                }
            }
        }
        $setting['svalue'][$key]
        ['field'] = $temp;
    }
    table_common_setting::t()
    ->update_setting
    ('profilegroup', $setting
    ['svalue']);
}
```
### 修复 2:第 865-878 行(plugins 配置处理)
修复前:

```
if(!$method) {
    $_G['setting']['plugins']
    ['available'] = $data['plugins']
    ['available'];
    if($adminmenu[0]) {
        $adminmenu[0] = array_merge(
            [['name' => 
            'plugins_system', 'sub' 
            => 1]],
            $adminmenu[0],
            [['name' => 
            'plugins_system', 'sub' 
            => 2]]
        );
    }
    savecache('adminmenu', 
    array_merge((array)$adminmenu
    [0], (array)$adminmenu[1]));
}
```
修复后:

```
if(!$method) {
    if(!isset($_G['setting']
    ['plugins']) || !is_array($_G
    ['setting']['plugins'])) {
        $_G['setting']['plugins'] = 
        [];
    }
    $_G['setting']['plugins']
    ['available'] = $data['plugins']
    ['available'];
    if($adminmenu[0]) {
        $adminmenu[0] = array_merge(
            [['name' => 
            'plugins_system', 'sub' 
            => 1]],
            $adminmenu[0],
            [['name' => 
            'plugins_system', 'sub' 
            => 2]]
        );
    }
    savecache('adminmenu', 
    array_merge((array)$adminmenu
    [0], (array)$adminmenu[1]));
}
```
### 修复原因
两处修复都是因为 PHP 8.0+ 对类型检查更严格,当变量是字符串而非数组时,访问数组偏移量会报错 "Cannot access offset of type string on string"。通过添加 is_array() 检查,确保变量是数组类型后再进行操作。

终于搞定升级了
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-9 16:43 , Processed in 0.048806 second(s), 10 queries , Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2026 Discuz! Team.

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