You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCart 3.0.7+PHP8.1下false转数组弃用错误修复咨询

问题解决:OpenCart 3.0.7 + PHP8.1 浏览器重启后语言检测报错

错误原因

报错触发点为代码最后一行$languages[$code]['language_id'],在PHP8.1环境中,当$languages[$code]返回false或null时,直接访问其数组键会触发「自动将false转换为数组已被弃用」的警告。

根源是语言检测逻辑中的条件判断错误:原代码中if (!$detect && !is_array($languages))的逻辑完全错误——$languages本身是存储语言列表的数组,该条件永远不会成立,导致浏览器语言匹配失败时无法进入备用检测逻辑,最终$code可能为空或无效值,后续访问$languages[$code]['language_id']时触发报错。

修复步骤

修改/home/public/musabgbar/storage/modification/catalog/controller/startup/startup.php文件,调整两处代码:

  1. 修正语言检测的条件判断
    将:
if (!$detect && !is_array($languages)) { 

修改为:

if (!$detect && is_array($languages)) { 
  1. 增加$code的兜底校验(可选,提升代码健壮性)
    在设置config_language_id的代码前,确保$code一定存在于$languages数组中:
    在这段代码之前:
// Set the config language_id
$this->config->set('config_language_id', $languages[$code]['language_id']);         

添加:

// 确保$code始终有效
if (!array_key_exists($code, $languages)) {
    $code = $this->config->get('config_language');
}

完整修复后的代码片段

// Language Detection
    if (!empty($this->request->server['HTTP_ACCEPT_LANGUAGE']) && !array_key_exists($code, $languages)) {
        $detect = '';
        
        $browser_languages = explode(',', $this->request->server['HTTP_ACCEPT_LANGUAGE']);
        
        // Try using local to detect the language
        foreach ($browser_languages as $browser_language) {
            foreach ($languages as $key => $value) {
                if ($value['status']) {
                    $locale = explode(',', $value['locale']);
                    
                    if (in_array($browser_language, $locale)) {
                        $detect = $key;
                        break 2;
                    }
                }
            }   
        }           
        if (!$detect && is_array($languages)) { 
                // Try using language folder to detect the language
                foreach ($browser_languages as $browser_language) {
                    if (array_key_exists(strtolower($browser_language), $languages)) {
                        $detect = strtolower($browser_language);                        
                        break;
                    }
                }
        }
        
        $code = $detect ? $detect : '';
    }
    
    
    if (!array_key_exists($code, $languages)) {
        $code = $this->config->get('config_language');
    }
    
    if (!isset($this->session->data['language']) || $this->session->data['language'] != $code) {
        $this->session->data['language'] = $code ;
    }
            
    if (!isset($this->request->cookie['language']) || $this->request->cookie['language'] != $code) {
        setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/');
    }
            
    // Overwrite the default language object
    $language = new Language($code);
    $language->load($code);
    
    $this->registry->set('language', $language);
    
    // 确保$code始终有效
    if (!array_key_exists($code, $languages)) {
        $code = $this->config->get('config_language');
    }
    
    // Set the config language_id
    $this->config->set('config_language_id', $languages[$code]['language_id']);         

内容的提问来源于stack exchange,提问作者musab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:24:51