|
|
9#
樓主 |
發(fā)表于 2026-4-8 01:27:30
|中國|
只看Ta
\source\function\cache\cache_setting.php
### 修復(fù) 1:第 77-99 行(profilegroup 配置處理)
修復(fù)前:
```
}?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']);
}
```
修復(fù)后:
```
}?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']);
}
```
### 修復(fù) 2:第 865-878 行(plugins 配置處理)
修復(fù)前:
```
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]));
}
```
修復(fù)后:
```
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]));
}
```
### 修復(fù)原因
兩處修復(fù)都是因?yàn)?PHP 8.0+ 對類型檢查更嚴(yán)格,當(dāng)變量是字符串而非數(shù)組時,訪問數(shù)組偏移量會報錯 "Cannot access offset of type string on string"。通過添加 is_array() 檢查,確保變量是數(shù)組類型后再進(jìn)行操作。
終于搞定升級了 |
|