修复解序列失败,导致无法显示banner

bug问题 · hatch · 于 5年前 发布 · 1746 次阅读

使用Docker按照官方流程安装,最后打开首页,发现没有显示banner,查看源码发现在fecshop\services\cms\staticblock\StaticBlockMysqldb 类的getByIdentify方法解序列失败,原因大概是解码与编码不一致,导致特殊符号长度不一。

public function getByIdentify($identify)
    {
        $one = $this->_staticBlockModel->find()->asArray()->where([
            'identify' => $identify,
        ])->one();
        foreach ($this->_lang_attr as $attrName) {
            if (isset($one[$attrName])) {
                $one[$attrName] = unserialize($one[$attrName]);
            }
        }

        return $one;
    }

在网上找到解决方法:

public function getByIdentify($identify)
    {
        $one = $this->_staticBlockModel->find()->asArray()->where([
             'identify' => $identify,
        ])->one();
        foreach ($this->_lang_attr as $attrName) {
            if (isset($one[$attrName])) {
                // $one[$attrName] = unserialize($one[$attrName]);
                $one[$attrName] = $this->mb_unserialize($one[$attrName]);
            }
        }

        return $one;
    }

    protected function mb_unserialize($serial_str) 
    {
        $serial_str = preg_replace_callback('/s:(\d+):"([\s\S]*?)";/', function($matches) {
            return 's:'.strlen($matches[2]).':"'.$matches[2].'";';
        }, $serial_str);
        return unserialize($serial_str); 
    }
共收到 3 条回复 fecshop
Fecmall#15年前 0 个赞

对比一下demo,demo没有问题吧?

具体是数据库的那行数据?

hatch#25年前 0 个赞

@Fecmall [#1楼](#comment1) 按照docker安装示例装的,除了没显示banner,其它正常。具体数据在static_block表id=5。还有就是docker安装时,docker-compose配置切换aliyun,docker-compose.yml.aliyun文件mysql缺少example_db_2.x,不然在导入数据环节会找不到sql文件

Fecmall#35年前 0 个赞

@hatch #2楼 有空再看一下docker吧,最进有点忙

可以直接搭建,或者使用宝塔控制面板一键安装

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics